我在这里尝试测量在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++);
}
}
}
}
答案 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
}