2016-12-27 8 views
1

Ich muss 5 oder mehr Zeichen lange Wörter in einer gegebenen Zeichenfolge umkehren. Zum Beispiel: * Gegebene Zeichenfolge: Mein Name ist Michael. * Ausgabe: Mein Name ist leahciM.Einige Wörter in einer Zeichenfolge umkehren

Der Rest des Satzes bleibt gleich, nur die langen Wörter werden umgekehrt.

Bisher kam ich mit auf den Punkt:

public static String spinWords(String sentence) { 
    String[] splitWords = sentence.split(" "); 
    String reversedSentence = ""; 
    String reversedWord = ""; 
    for (String str : splitWords) { 
     if (str.length() >= 5) { 
      for (int i = str.length() - 1; i >= 0; i--) 
       reversedWord += (str.charAt(i) + " "); 
     } 
    } 
} 

Und ich habe diese Worte umgekehrt, aber 1) sie sind in einer Zeichenkette, ohne Leerzeichen 2) Ich weiß nicht, wie sie zurück zu setzen in ihre Orte in String

Antwort

5

ist hier ein Vorschlag:

  • schreiben eine Methode, die einen String umkehrt:

    private static String reverse(String s) { ... } 
    
  • dann im Hauptverfahren, nennen Sie es, wenn notwendig:

    if (str.length() >= 5) str = reverse(str); 
    
  • Sie dann zusammen, um die Worte fassen müssen zurück, vermutlich in den reversedSentence string:

    reversedSentence += str + " "; //you will have an extra space at the end 
    

Anmerkungen zur Seite:

  • mit einem StringBuilder kann für längere Sätze effizienter als String-Verkettung erweisen.
  • könnten Sie alle Wörter in eine List<String> innerhalb der Schleife setzen und rufen reversedSentence = String.join(" ", list) nach der Schleife kann
  • einen String Umkehr in einer Zeile durchgeführt werden - Sie zahlreiche ähnliche Q & Wie auf Stackoverflow finden sollte.
+0

Gibt es eine Möglichkeit, diesen Raum am Ende zu entfernen? Ich mag Ihre Methode wirklich, ohne StringBuilder zu verurteilen (ich glaube nicht, dass ich zusätzliche Bibliotheken bei Codewars verwenden kann). – doublemc

+1

@doublemc * "Sie könnten alle Wörter zurück in eine Liste innerhalb der Schleife setzen und reversedSentence = String.join (" ", list) nach der Schleife" * aufrufen oder die andere Antwort mit 'String # trim()' überprüfen – m0skit0

+0

@doublemc ein Trick ist, ein 'boolean firstWord = true' zu ​​haben und in deiner Schleife:' if (firstWord) {result = str; firstWord = false; } else {Ergebnis + = "" + str; } ' – assylias

4

können Sie verwenden StringBuilder

public static String spinWords(String sentence) { 
    String[] splitWords = sentence.split(" "); 
    StringBuilder builder = new StringBuilder(); 

    for (String str : splitWords) { 
     if (str.length() < 5) { 
      builder.append(str); 
     else 
      builder.append(new StringBuilder(str).reverse().toString()); 

     builder.append(" "); 
    } 

    return builder.toString().trim(); 
} 
0

Keine Notwendigkeit, alles, was Sie es hatte fast zu benutzen, überprüfen Sie einfach Ihre „für“ Loops und erinnere mich an die seitenrichtigem Zeichenfolge hinzuzufügen.

public static String spinWords(String sentence) { 
    String[] splitWords = sentence.split(" "); 
    String reversedSentence = ""; 
    String reversedWord; 
    for (String str : splitWords) { 
     if (str.length() >= 5) { 
      reversedWord = ""; 
      for (int i = str.length() - 1; i >= 0; i--) { 
       reversedWord += (str.charAt(i)); 
      } 
      reversedSentence += " " + reversedWord; 
     } else { 
      reversedSentence += " " + str; 
     } 
    } 
    return reversedSentence; 
} 
0

Verwenden StringBuilder die Antwort zu bauen, wie Sie die Elemente in splitWords verarbeiten.

Sie können auch das Idiom von space mit speziellen erstmaligen Wert ("") nützlich finden.

Es gab auch einen Fehler in Ihrem ursprünglichen Code.

So, hier ist was ich tun würde:

public class ReverseLongWord { 

    public static void main(String[] args) { 
     String testInput = "My name is Michael"; 

     System.out.println(spinWords(testInput)); 

    } 

    public static String spinWords(String sentence) { 
     String[] splitWords = sentence.split(" "); 
     String reversedSentence = ""; 
     StringBuilder sb = new StringBuilder(); 
     String space = "";    // first time special 
     String reversedWord = ""; 
     for (String str : splitWords) { 
      if (str.length() >= 5) { 
       for (int i = str.length() - 1; i >= 0; i--) { 
        reversedWord += (str.charAt(i)); // Bug fixed 
       } 
       sb.append(space + reversedWord); 
      } else { 
       sb.append(space + str); 
      } 
      space = " ";    // second time and onwards 
     } 
     return sb.toString(); 
    } 

} 

Die Ausgabe dieses Programms die folgenden Ergebnisse, wie Sie angegeben haben:

My name is leahciM 
-1

Ich denke, die umgekehrte Methode, wie manche Leute würde vorschlagen sei der einfachste Weg, hier teile ich meine Umsetzung

Verwandte Themen