打印此句中的每个单词

时间:2016-02-19 21:59:25

标签: java word sentence

我有以下句子:

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;最后它会起作用,但我不想这样做。

你能否告诉我这是我的错误以及如何解决?

另外,请您为此提供更好的解决方案。

4 个答案:

答案 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)

  1. 声明String
  2. 使用split()对象
  3. 上的String方法将字符串拆分为数组
  4. 遍历阵列中的每个元素并将其打印到屏幕
  5. 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