【问题标题】:Why its gets error when my input string ends with spaces..?为什么当我的输入字符串以空格结尾时它会出错..?
【发布时间】:2014-09-17 17:11:24
【问题描述】:

//统计String中的单词总数

class Word
{
    static int Wordcount(String k)
    {

        int count=0; 
        char ch[]=k.toCharArray();
        for(int i=0;i<k.length();i++)
        {
            if(ch[i]==32 && ch[i+1]!=32)
            {
                count++;
            }
        }
        return(++count);
    }

    public static void main(String... s)
    {
        String k="java is a programming lan";
        /* if input string is "java is a prog lan    " then its gives//Exception                   
        */
        int b=Wordcount(k);
        System.out.println("Your input String has "+b +" words");
    }
}

// 异常aati h agr string khtm ho ri h space se

【问题讨论】:

  • 为什么不用String.split()方法来获取字数呢?
  • ch[i] == 32 非常令人困惑。您将charint 进行比较,而不是像他们记忆的ASCII 表中的每个人一样。请改用ch[i] == ' '

标签: java string indexoutofboundsexception


【解决方案1】:
if(ch[i]==32 && ch[i+1]!=32)

如果ch[i] 是字符串中的最后一个字符,并且代码尝试检查ch[i+1],那么您超出了字符串的范围,并且会出现错误。

如果你想让你的条件匹配字符串末尾的空格,那么你可以使用

if (ch[i]==32 && (i+1 == ch.length || ch[i+1]!=32))

如果你希望你的条件只有在后面有一个非空格字符时才匹配,那么你可以使用

if (ch[i]==32 && i+1 < ch.length && ch[i+1]!=32)

【讨论】:

    【解决方案2】:

    你是在这个条件下同时检查当前索引和下一个索引:

    if(ch[i]==32 && ch[i+1]!=32)
    

    如果你在最后一个字符上并且它是一个空格,那么 ch[i+1]!=32 将被评估,导致异常。

    要解决此问题,请确保在检查索引 i+1 时您不在数组末尾。

    if(ch[i]==32 && i < k.length() - 1 && ch[i+1]!=32)
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2021-12-30
      • 2021-07-23
      • 2020-07-15
      • 2013-03-22
      相关资源
      最近更新 更多