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 einfachi < 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 gesehenSystem.lineSeparator()
(aber ich habe in der Regel eine statische Sammler für meine Lösung).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie overcomplicating Dinge. String bereits
split(regexDelimiter)
Methode, die akzeptiert regex Vertretung der Ort, an dem Sie teilen möchten.Auch erweiterte for-Schleife erlaubt uns das einfache iterieren über alle Elemente eines Arrays oder Implementierungen der Schnittstelle Durchsuchbar
Seit Java 8 haben wir auch
String.join(delimiter, elements)
Methode, welche Zeichenfolge, dieelement0[delimiter]element1[delimiter]..
.Also je nachdem, was Sie suchen, können Sie verwenden möchten
oder
oder vielleicht sogar einfacher
Letzten Beispiel erstellt einfach neue Zeichenfolge basiert auf der Originalversion, die in Diesem neuen string ersetzt jeden Raum mit OS-abhängigen line separator (wie für Windows
\r\n
).Können Sie auch zusätzliche Klasse entworfen, um uns zu helfen, die Daten zu Lesen aus string. Diese Klasse ist
Scanner
. Also in deinem Fall könntest du einfach verwendenKönnen Sie split den string in array
Wenn Sie nicht möchten, dass zu hart code für Raum können Sie mithilfe einer regex
Ausgabe
String
split()
Methode auf dieString
ObjektAusgabe:
Versuchen.
Ergebnis