Drucken Sie jedes Wort von diesem Satz

Habe ich den folgenden Satz:

This is a text and we should print each word

Will ich drucken jedes Wort aus diesem Satz.

package lab2_3;

public  class Main {

    public static void main(String[] args) {

        String s2 = "This is a text and we should print each word";


        int i;
        int j;
        for (i = 0; i <= s2.length() - 1; i++){
            if (s2.substring(i).startsWith(" ") || i == 0){

                //here I search for the start of the sentence or " "
                for (j = i + 1; j <= s2.length() - 1; j++){

                    if (s2.substring(j).startsWith(" ") || j == s2.length() - 1) {
                        //here I search for the next " " or the end of the sentence
                        System.out.println(s2.substring(i, j));
                        //printing
                        i = j;
                        //i=j because the next search must be done from where we left

                    }
                }
            }
        }
    }
}

Ausgabe:

This
 is
 a
 text
 and
 we
 should
 print
 each
 wor

Wie Sie sehen können es fast funktioniert, aber der Brief d ist fehlt das Letzte Wort.
Eine mögliche Lösung ist das hinzufügen von "" am Ende wird es funktionieren, aber ich will nicht zu tun.

Können Sie mir bitte sagen, wo es ist mein Fehler und wie man es beheben ?

Außerdem, kannst du bitte eine bessere Lösung für dieses.

  • Ich kann sehen, ob ich print wie dieses : System.aus.println(s2.substring(i, j+1)); ,es wird funktionieren, aber noch keine Ahnung warum es nicht funktioniert, in den ersten Platz.
  • Randnotiz: i <= s2.length() - 1 warum nicht einfach i < s2.length()? Es ist viel klarer.
  • Für eine bessere Lösung: Arrays.stream(s2.split(" ")).collect(Collectors.joining(System.getProperty("line.separator")))
  • Ich denke immer noch, dass for (String word : s2.split("\\s+")){System.out.println(word);} ist sauberer.
  • Nun, Sie tun nicht das gleiche... Sie produzieren nie den Ausgabe-string, die könnte gut sein oder schlecht, je nach Anwendungsfall. Ich mag die stream-API und finden es sehr sauber ist für die meisten Anwendungen.
  • nie produzieren den output-string" - fair genug, wie etwa String.join(System.lineSeparator(), s2.split("\\s+"))? Wahre stream-API kann sehr nett sein, aber IMO ist es überlastet.
  • ja, das ist besser. Ich vergessen java hat join jetzt. Und ich habe noch nie gesehen System.lineSeparator() (aber ich habe in der Regel eine statische Sammler für meine Lösung).

Schreibe einen Kommentar