我有以下句子:

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/

10-10 14:41