我有以下句子:
This is a text and we should print each word
我想从这句话中打印出每个单词。
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
}
}
}
}
}
}
输出:
This
is
a
text
and
we
should
print
each
wor
如您所见,它几乎可以正常工作,但是最后一个单词中缺少字母d。
一个可能的解决方案是在末尾添加“”,它会起作用,但是我不想这样做。
您能告诉我我的错误在哪里以及如何解决吗?
另外,您能否为此提供更好的解决方案。
最佳答案
您使事情变得过于复杂。字符串已经具有split(regexDelimiter)
方法,该方法接受表示要分割的位置的正则表达式。
同样,enhanced for loop允许我们轻松地迭代数组的所有元素或Iterable接口的实现
for (String str : strArray){
//do something with str
}
从Java 8开始,我们还有
String.join(delimiter, elements)
方法,该方法可以创建表示element0[delimiter]element1[delimiter]..
的字符串。因此,根据您要查找的内容,可能要使用
for (String word : s2.split(" ")){
System.out.println(word);
}
要么
String inEachLine = String.join(System.lineSeparator(), s2.split(" "));
甚至更简单
String inEachLine = s2.replace(" ", System.lineSeparator());
最后一个示例只是基于原始字符串创建新的String,该新字符串将用与操作系统相关的行分隔符替换每个空格(例如Windows
\r\n
)。您还可以使用其他旨在帮助我们从字符串读取数据的类。此类为
Scanner
。因此,在您的情况下,您可以简单地使用Scanner sc = new Scanner(s2);
while(sc.hasNext()){
System.out.println(sc.next());
}
关于java - 打印此句子中的每个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35515851/