我有以下句子:
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在最后一个字中缺失了。 一种可能的解决方案是添加&#34; &#34;最后它会起作用,但我不想这样做。
你能否告诉我这是我的错误以及如何解决?
另外,请您为此提供更好的解决方案。
答案 0 :(得分:6)
你太复杂了。字符串已经有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());
最后一个示例只是根据原始字符串创建新的字符串,这个新字符串将替换每个空格的操作系统依赖行分隔符(例如Windows \r\n
)。
您还可以使用其他类来帮助我们从字符串中读取数据。这个班级是Scanner
。所以在你的情况下你可以简单地使用
Scanner sc = new Scanner(s2);
while(sc.hasNext()){
System.out.println(sc.next());
}
答案 1 :(得分:2)
您可以在数组中分割字符串
String s2 = "This is a text and we should print each word";
String [] s3 = s2.split(" ");
int i;
for (i = 0; i < s3.length; i++)
System.out.println(s3[i]);
}
如果您不想硬编码空间,可以使用正则表达式
String s2 = "This is a text and we should print each word";
String [] s3 = s2.split("\\s");
int i;
for (i = 0; i < s3.length; i++)
System.out.println(s3[i]);
}
输出
This
is
a
text
and
we
should
print
each
word
答案 2 :(得分:1)
String
split()
对象String
方法将字符串拆分为数组
public static void main(String[] args) {
String slashString = "This is a text and we should print each word";
for(String word : slashString.split(" ")){
System.out.println(word);
}
}
输出:
This
is
a
text
and
we
should
print
each
word
答案 3 :(得分:1)
试试这个。
String s2 = "This is a text and we should print each word";
String[] t = s2.split("(?= )");
for (String e : t)
System.out.println(e);
结果
This
is
a
text
and
we
should
print
each
word