获取java.lang.ArrayIndexOutOfBoundsException,looked,找不到相同的示例

获取java.lang.ArrayIndexOutOfBoundsException,looked,找不到相同的示例,java,arrays,for-loop,indexoutofboundsexception,Java,Arrays,For Loop,Indexoutofboundsexception,我正在为AP计算机科学课写一个“推特检查器”代码。代码应该检查tweet的长度是否在140个字符的限制内,如果是,则打印所使用的hashtag、@和链接的数量。我使用.split方法将所有字符放入一个数组,然后使用for循环访问数组以查找特定字符 我不断遇到java.lang.ArrayIndexOutOfBoundsException,我知道这意味着我试图访问字符串中不存在的元素,例如46个字符数组的元素46,但我不知道这里的确切问题是什么。上一次我因为“不够努力”而被唠叨,但我只在这门学科上

我正在为AP计算机科学课写一个“推特检查器”代码。代码应该检查tweet的长度是否在140个字符的限制内,如果是,则打印所使用的hashtag、@和链接的数量。我使用.split方法将所有字符放入一个数组,然后使用for循环访问数组以查找特定字符

我不断遇到java.lang.ArrayIndexOutOfBoundsException,我知道这意味着我试图访问字符串中不存在的元素,例如46个字符数组的元素46,但我不知道这里的确切问题是什么。上一次我因为“不够努力”而被唠叨,但我只在这门学科上搜索了两个多小时,我只是一名高中生

我感谢所有的帮助

import java.util.Scanner;
import java.lang.Math; 

class Main{
    public static void main(String[] args)
     {
      Scanner scan = new Scanner (System.in);
      System.out.println("Please enter a tweet:");
      String tweet = scan.nextLine();
      int length = tweet.length ();
      String[] tweetArray = tweet.split ("");
      int c = 0;
      int d = 0;
      int e = 0;
      int i = 0;
      if (length > 140)
        System.out.println("Excess Characters: " + (length - 140));
      else
      {
        System.out.println("Length Correct");
        for (i = 0; i < length; i++)
        {
          if (tweetArray[i].equals("#"))
          {
            if(!tweetArray[i+1].equals(" "))
            {
              c++;
            }
          }
        }
        System.out.println("Number of Hastags: " + c);
        for (i = 0; i < length; i++)
        {
          if (tweetArray[i].equals("@"))
          {
            if(!tweetArray[i+1].equals(" "))
            {
              d++;
            }
          }
        }
          System.out.println("Number of Attributions: " + d);
          for (i = 0; i < length; i++)
          {
            if((tweetArray[i].equals("h")) || (tweetArray[i].equals("H")))
            {
              if(tweetArray[i+1].equals("t") || tweetArray[i+1].equals("T"))
              {
                if(tweetArray[i+2].equals("t") || tweetArray[i+2].equals("T"))
                {
                  if(tweetArray[i+3].equals("p") || tweetArray[i+3].equals("P"))
                  {
                    if(tweetArray[i+4].equals(":"))
                    {
                      if(tweetArray[i+5].equals("/"))
                      {
                        if(tweetArray[i+6].equals("/"))
                        {
                          if(!tweetArray[i+7].equals(" "))
                          {
                            e++;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        System.out.println("Number of Links: " + e);
      }




}
}
import java.util.Scanner;
导入java.lang.Math;
班长{
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“请输入tweet:”);
String tweet=scan.nextLine();
int length=tweet.length();
字符串[]tweetArray=tweet.split(“”);
int c=0;
int d=0;
int e=0;
int i=0;
如果(长度>140)
System.out.println(“多余字符:+(长度-140));
其他的
{
系统输出打印长度(“长度正确”);
对于(i=0;i
for
循环中,
i
正确地从
0
迭代到最大长度。但是,您有如下代码:

 tweetArray[i+1]
 ...
 tweetArray[i+7]
一旦
i
达到(或接近)其最大值,该操作将失败。也就是说,您正在引用超过数组末尾的内容

通常,如果需要检查下一个字符的某些内容,则需要首先检查它是否存在(因为您只知道当前字符存在)


不过,您可能希望回顾一下您的整个方法。似乎不需要将字符串拆分为字符。您可以使用基于字符串的函数来计算
@
字符数或检查是否存在字符串(例如
http://
)。签出。

好的,我该如何解决这个问题?@SeanTheSaxMan One会认为不给数组一个超出范围的索引将解决这个问题。好的,我理解为什么我的代码会失败,现在我的问题是,我该如何检查下一个字符不是空格,不给代码一个失败的方法?调试这类事情的最好方法是使用调试器。如果你没有使用一个,停止你现在正在做的,安装一个,这样你就可以使用它了。它将极大地提高您对所编写代码的理解,极大地提高您的学习速度。有多个质量合理的免费JavaIDE(Netbeans、IntellijIDEA社区版、Eclipse),都带有内置调试器。