# String reversen



## merv (23. Okt 2017)

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 :


```
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 (23. Okt 2017)

Moin,


merv hat gesagt.:


> " 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


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

VG Klaus


----------



## merv (23. Okt 2017)

VfL_Freak hat gesagt.:


> Moin,
> 
> Warum splittest Du Deinen String nicht einfach über das Leerzeichen??
> Dann bekommst Du so ein Array:
> ...




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


----------



## VfL_Freak (23. Okt 2017)

merv hat gesagt.:


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


dann füge sie beim Zusammenfrickeln halt ein ... 

```
String myResult = myArray[0] + " " + reverse(myArray[1]) + " " + .....
```
VG Klaus


----------



## merv (23. Okt 2017)

VfL_Freak hat gesagt.:


> String myResult = myArray[0] + " " + reverse(myArray[1]) + " " + .....


ja aber es kann auch sein, dass es mehrere Leerzeichen vorkommen, oder am Anfang Leerzeichen vorkommen... Irgendwie muss ich die Leerzeichen doch merken?


----------



## T_T (24. Okt 2017)

merv hat gesagt.:


> oder am Anfang Leerzeichen vorkommen...


Dafür kannst du die trim() funktion benutzen.



merv hat gesagt.:


> ja aber es kann auch sein, dass es mehrere Leerzeichen vorkommen


Hier kannst du die isEmpty() funktion benutzen.


----------

