OutofBounds异常

时间:2019-03-07 16:49:12

标签: java swing char

我在这里尝试测量在JTextArea中键入的文本中有多少空格。我收到出站异常。为什么这样?

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
        at java.lang.String.charAt(String.java:658)
        at ClassTest.main(ClassTest.java:11)





import javax.swing.*;
public class ClassTest {
    public static void main(String [] args) {
        JFrame frame = new JFrame();
        JTextArea textarea = new JTextArea();
        frame.setSize(300, 300);
        frame.add(textarea);
        frame.setVisible(true);
        String text=textarea.getText();
        int count = 0;
        for(int i=0;i>=text.length();i++) {
            char spacecount = text.charAt(i);
            if(spacecount==' ') {
                System.out.print(count++);
            }

        }

    }
}

1 个答案:

答案 0 :(得分:0)

对于'for'循环条件,我认为应该 =。

您的for循环如下:

for(int i=0; i>=test.length();i++){

    char spacecount = test.charAt(i);

    if(spacecount==' '){
        System.out.println(count++);
    }
}

让我们来看看for循环。第一部分说,我们创建一个名为i的int并将其初始化为0;

i = 0;

下一部分说,在这种情况下,继续循环。因此它将在

i >= test.length()

下一部分说,在每次迭代之后,让我们向i加1。可能运行的唯一原因是

if test.length() == 0; 
if test.length() == 1;

0不是> = 1,因此它将无法运行。这意味着,它可以运行的唯一原因是长度为0。现在,如果字符串的长度为0,则它​​将为“”。 什么是charAt(0)?没有。没有0索引。如果字符串为“ a”。然后charAt(0)将返回“ a”。它正在寻找不存在的东西,因此将无法运行。因此,问题之一是您需要将条件更改为<而不是> =。接下来,建议对字段(例如spacecount)使用驼峰式大小写,这意味着您应该将其更改为spaceCount。 最后,在这种情况下可能不会发生,但可以说test = null。怎么了?什么是null.length()?那有可能吗?好吧,实际上它会在test = null的情况下进行编译;然后执行test.length()。但是,您不能在null值上调用此类方法,因此您将获得可怕的运行时错误“ NullPointerException”。这说,嗯。我们有一个指向null的字符串。好吧,我们对此无能为力。这里是例外。因此,在以后的代码中,建议能够解决此类情况。那么我们该怎么办?我们如何检查String == null?好吧... String == null。因此,将来,如果某些内容可能为空,则将for循环放在一个if语句中,该语句为:

if(test != null){

//put for loop here

} else{

//do something else
}