为什么我不能在这种情况下使用子串?

时间:2015-04-11 04:07:37

标签: java string api substring

我试图将句子中的单词分开。句子的每个单词都存储在字符串word中,然后它将所有内容重新添加到一个字符串中。

但为什么我的子串线会出错呢?

        String sent = IO.readString();
        char x;
        String word ="";
        int count = 0;

    for(int i = 0; i < sent.length(); i++){
        x = sent.charAt(i);
            if(x == ' ')
           {
            word = sent.substring(x-count,x);
            word = word + ' ';
            count =0;
           }
    count++;
}

3 个答案:

答案 0 :(得分:3)

word = sent.substring(x-count,x);应为word = sent.substring(i-count,i);

答案 1 :(得分:1)

因为xchar,而不是int,所以

word = sent.substring(x-count,x);

它应该(可能)类似于

word = sent.substring(i-count,i);

因为iString中的位置。

答案 2 :(得分:1)

您应该考虑使用String.split(),它会返回String数组。

文档:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

要使用空格和标点符号作为分隔符,您可以执行以下操作:

String[] arrWords = sentence.split("([ ,.]+)");

如果您真的想要使用原始路线,则必须为第一个单词和最后一个单词添加一些特殊情况。虽然,当有多个空格或标点符号时会发生什么?测试并发现!

public class SeparateWords
{
  public static void main(String[] args)
  {
    String sent ="Hello there how are you";
    char x;
    String word ="";
    int count = 0;

    for(int i = 0; i <= sent.length(); i++){
       if (i == sent.length()){
         word = sent.substring(i-count+1,i);
         System.out.println(word);
         break;
       }
        x = sent.charAt(i);

        if(x == ' ')
        {
          if ((i-count) == 0){
            word = sent.substring(i-count,i);
          }
          else{
            word = sent.substring(i-count+1,i);
          }
          System.out.println(word);
          word = word + ' ';

          count =0;
        }
        count++;
    }

  }
}

输出:

Hello
there
how
are
you