2013-10-24 14 views
5

Der Satz String soll ein durch Leerzeichen getrenntes Wortpaar sein, z.B. "Jetzt ist die Zeit". showWords Job soll die Wörter des Satzes einen pro Zeile ausgeben.Wie man Satz Wort für Wort in einer separaten Zeile zeigt

Es ist meine Hausaufgabe, und ich versuche, wie Sie aus dem Code unten sehen können. Ich kann nicht herausfinden, wie und mit welcher Schleife man Wort für Wort ausgeben soll ... bitte helfen.

import java.util.Scanner; 


public class test { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     System.out.println("Enter the sentence"); 
     String sentence = in.nextLine(); 

     showWords(sentence); 
} 

    public static void showWords(String sentence) { 
     int space = sentence.indexOf(" "); 
     sentence = sentence.substring(0,space) + "\n" + sentence.substring(space+1); 
     System.out.println(sentence); 
    } 

} 

Antwort

0

Java String Klasse hat eine replace Methode, die Sie in aussehen sollte. Das macht diese homework ziemlich einfach.

String.replace

1

Da dies eine Hausaufgabe Frage ist, werde ich Ihnen nicht den genauen Code geben, aber ich möchte Sie bei der Methode suchen split im String -Klasse. Und dann würde ich eine For-Schleife empfehlen.

Eine weitere Alternative ist in Ihrem String zu ersetzen, bis es keine weiteren Räume links sind (dies sowohl mit einer Schleife und ohne eine Schleife durchgeführt werden kann, je nachdem, wie Sie es tun)

+0

Die Methode 'replace' behandelt alle Vorkommen des Space-Zeichens mit einem einzigen Methodenaufruf. Keine Schleife benötigt. – nhgrif

+0

@nhgrif Diese Methode ja, aber es gibt andere alternative Methoden (wie replaceFirst, oder die Verwendung von Substring wie das OP scheint bereits versucht zu haben).'replace' könnte die einfachste Lösung sein. –

+0

Was ist mit mehreren Räumen? Regex Ersatz ist eine bessere Wahl – Bohemian

0

aktualisieren

Verwenden Sie die Split-Methode der String-Klasse, um die Eingabezeichenfolge für das Leerzeichentrennzeichen aufzuteilen, sodass Sie ein String-Array mit Wörtern erhalten.

Dann durchlaufen Sie dieses Array mit einer modifizierten for-Schleife, um jedes Element des Arrays zu drucken.

import java.util.Scanner; 


    public class Test { 
     public static void main(String[] args) { 
      Scanner in = new Scanner(System.in); 

      System.out.println("Enter the sentence"); 
      String sentence = in.nextLine(); 

      showWords(sentence); 
    } 

     public static void showWords(String sentence) { 
      String[] words = sentence.split(' '); 
      for(String word : words) { 
      System.out.println(word); 
      } 
     } 

    } 
+2

Die Frage bezieht sich auf eine Hausaufgabe. Eine direkte Antwort zu veröffentlichen ist nicht besonders hilfreich. – nhgrif

+0

@nhgrif: Ja, du hast Recht. Ich fügte eine Erklärung hinzu. – Rami

1

Mit regex könnte man einen Einzeiler verwenden:

System.out.println(sentence.replaceAll("\\s+", "\n")); 

mit dem zusätzlichen Vorteil, dass mehrere Räume nicht Leerzeilen als Ausgang verlassen.


Wenn Sie eine einfachere String Methoden benötigen nähern Sie split() als

String[] split = sentence.split(" "); 
StringBuilder sb = new StringBuilder(); 
for (String word : split) { 
    if (word.length() > 0) { // eliminate blank lines 
     sb.append(word).append("\n"); 
    } 
} 
System.out.println(sb); 


verwenden könnte Wenn Sie einen noch nackten Knochen Ansatz müssen (bis String Indizes) und mehr auf den Linien von Ihrem eigenen Code; Sie müssten Ihren Code in eine Schleife einfügen und ein wenig optimieren.

int space, word = 0; 
StringBuilder sb = new StringBuilder(); 

while ((space = sentence.indexOf(" ", word)) != -1) { 
    if (space != word) { // eliminate consecutive spaces 
     sb.append(sentence.substring(word, space)).append("\n"); 
    } 
    word = space + 1; 
} 

// append the last word 
sb.append(sentence.substring(word)); 

System.out.println(sb); 
+0

Die Frage ist eine Hausaufgabe. Eine direkte Antwort zu veröffentlichen ist nicht besonders hilfreich. – nhgrif

1

Sie sind auf dem richtigen Weg. Ihre showWords-Methode funktioniert für das erste Wort, Sie müssen es nur tun, bis keine Wörter mehr vorhanden sind.

Schleife durch sie, vorzugsweise mit einer while-Schleife. Wenn Sie die while-Schleife verwenden, denken Sie darüber nach, wann Sie sie anhalten müssen, wenn keine Wörter mehr vorhanden sind.

Um dies zu tun, können Sie entweder einen Index des letzten Wortes behalten und von dort aus suchen (bis es keine mehr gibt), oder das letzte Wort löschen, bis die Satzzeichenfolge leer ist.