String reversen

merv

Mitglied
Hallo, ich hätte eine Frage und zwar haben wir eine Aufgabe bekommen, wo wir ein String eingeben und danach soll jedes zweite Wort 'reversed' werden. Und es soll danach wieder der String mit den ursprünglichen Leerzeichen und Satzzeichen zurückgegeben werden.
z.B
the call translate(" this is a silly program .")
must return " this si a yllis program ."

Ich habe das versucht mit LinkedList zu implementieren Soweit mein code :

Java:
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Arrays;
import java.io.*;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class translateString //implements Assignment2
{

   public static void main(String [] args){

      @SuppressWarnings("resource")
    Scanner inputText = new Scanner(System.in);
      System.out.println("Your input text:");
    
      while(true){ 
            String input=inputText.nextLine();
            if(checkInput(input))
               /*for(int w:translate(input)){
                    System.out.println(w);
                    }  */
                System.out.println(translate(input));
              else
                System.out.println("String did not match");
             
      }
      
      
   }
 
 
   public static String  translate(String s) {
     
       LinkedList<Integer> linkedlist = new LinkedList<Integer>();
       int counter = 0;                              //Wörter in Array speichern
       char[] string = s.toCharArray();
      // int [] posLeerzeichen = new int [string.length];
       for (int i = 0, n = string.length; i < n; i++) {
           if(string[i]== ' ')
              linkedlist.add(i);
       }
     
       LinkedList<String> words = new LinkedList<String>();
    
       String[] array = s.trim().split("\\s+");              //mit split() findets die Wörter
       //String [] wörter= new String [array.length];   
       @SuppressWarnings("unchecked")
    LinkedList<String> arrays = new LinkedList(Arrays.asList(array));
     
       for (int i=0;i< arrays.size();i++) {           // Array durchgehen und jedes zweite wort in ein anderes Array speichern
           if(i % 2 == 1)
               words.add(arrays.get(i));
           /*else

                wörter[i] = "leer"; */
       }
     
       LinkedList <String> reversed = new LinkedList <String> ();
       for (int i=0; i< words.size();i++) {
            reversed.add(reverse(words.get(i)));
           //reversed[i]= reverse(wörter[i]);
       }
     
      int j=0;
      LinkedList <String> end = new LinkedList <String>();
    
    
    
     /* for (int i=0; i< linkedlist.size(); i++) {
           end.add(linkedlist.get(i), " ");
      }  */
    
      for(int i=0; i<arrays.size();i++) {
          if(i%2 == 1)
          end.add(i, reversed.getFirst());
          else
            end.add(i, arrays.getFirst() );

        /* if (i == linkedlist.get(i))
               // array[i] = reversed [i];
          end.add(" ");
               */
       }
     
  
      String formattedString = arrays.toString()
                .replace(",", "")  //remove the commas
                .replace("[", "")  //remove the right bracket
                .replace("]", "")  //remove the left bracket
                .trim();          //remove trailing spaces from partially initialized arrays
    
    
    
      return formattedString;
   }
    
      public static String  reverse (String s) {
     
       String reverse="";
     
          for ( int i = s.length()-1  ; i >= 0 ; i-- )
           // if(s.charAt(i)=='.') {
    
          reverse = reverse + s.charAt(i);
          
   
          return reverse;
    
          //System.out.println("Reverse of entered string is: "+reverse);
     
   }
   public static boolean checkInput(String s){
      /*Pattern pattern = Pattern.compile("^[A-Za-z ]+[\\.]{1}$");
      Matcher matcher = pattern.matcher(s);

      return matcher.find();*/
    
      return Pattern.compile("^[A-Za-z ]+[\\.]{1}$").matcher(s).find();
   }
 
 

}


Meine Idee war verschiedene LinkedList zu erstellen und danach am ende alles zusammenfügen. Sorry wenn die variablen teils englisch und deutsch benannt sind ... bin gerade beim ausprobieren. Ich schaff aber leider nicht am ende einen LinkedList mit sen ursprünglichen Leerzeichen zu erstellen. Also keine Ahnung wie ich das alles richtig zusammenfügen kann.
 

VfL_Freak

Top Contributor
Moin,
" this is a silly program"
Warum splittest Du Deinen String nicht einfach über das Leerzeichen??
Dann bekommst Du so ein Array:
myArray[0] = "this"
myArray[1] = "this"
myArray[2] = "this"
myArray[3] = "this"
myArray[4] = "this"
jetzt kannst Du auf die Indexe 1, 3, ... jeweils Deine Methode "reverse" anwenden und die Ergebnisse mit den anderen Indexen wieder zusammenbasteln

Java:
String myResult = myArray[0] + reverse(myArray[1]) + .....

VG Klaus
 

merv

Mitglied
Moin,

Warum splittest Du Deinen String nicht einfach über das Leerzeichen??
Dann bekommst Du so ein Array:
myArray[0] = "this"
myArray[1] = "this"
myArray[2] = "this"
myArray[3] = "this"
myArray[4] = "this"
jetzt kannst Du auf die Indexe 1, 3, ... jeweils Deine Methode "reverse" anwenden und die Ergebnisse mit den anderen Indexen wieder zusammenbasteln

Java:
String myResult = myArray[0] + reverse(myArray[1]) + .....

VG Klaus


Das problem ist dass ich die Leerzeichen brauche beim output. So gehen sie verloren.
 

Neue Themen


Oben