Error- StringIndexOutOfBoundsException:字符串索引超出范围:4

时间:2016-10-30 04:04:37

标签: java

我正在编写一个基本代码,用于检查推文是否包含主题标签或提及,如果其中包含空格或制表符,则不会计算。我也得到一个“未公开的字符文字”信息,我不知道为什么。

    for (int i=0; i < tweet.length(); i++) {

      char currentchar = tweet.charAt(i);
      char nextcar = tweet.charAt(i+1);

      if (currentchar == '#') {

        if (! (nextcar == ' ') && ! (nextcar == '/t')) {

        numofhashtags++; 

        } 
      }
       if (currentchar == '@') {

         if ((nextcar != ' ') && (nextcar != '/t')) {

        numofmentions++;
         }

       }
     }

2 个答案:

答案 0 :(得分:0)

首先,当您发布代码时,请发布推文的字符串值。

您的代码中的问题是:

for (int i=0; i < tweet.length(); i++) {

      char currentchar = tweet.charAt(i);
      char nextcar = tweet.charAt(i+1);//<-- here

现在让我们假设字符串长度是3。

您开始计算从第0个位置到第3个位置的字符串。执行i+1时,您尝试访问不存在的字符串的第4个索引。

同时使用"\t"检查标签"/t"

如何更改循环的可能方法是:

for (int i=1; i <tweet.length(); i++) {//change i=1 and condition to <=

      char currentchar = tweet.charAt(i-1);//since we are already accessing from the next character you will you have scan the previous character for current character by doing i-1
      char nextcar = tweet.charAt(i);// you will already have next character access so no need of i+1

答案 1 :(得分:0)

以此格式制作for-loop

 for (int i=0; i < tweet.length()-1; i++)