Java charAt()字符串索引超出范围:0

时间:2012-10-29 09:18:31

标签: java

我有这段代码:

private void submitPstart() {

    if (tStock.getText().charAt(0)>='A' && tStock.getText().charAt(0)<='Z'){


    }else {
        errorBox ("Uppercase A-Z");
    }

    tStock.setText("");
    tStock.setFocus();
}

这是有效但当我尝试不在文本框上放任何东西并按下OK按钮时它会崩溃。它说:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0

它指出了这一部分:if (tStock.getText().charAt(0)>='A' && tStock.getText().charAt(0)<='Z')

感谢任何帮助。感谢

5 个答案:

答案 0 :(得分:7)

您需要检查getText()是否返回0长度(即空)字符串。

如果确实如此,那就不要试图拉出第一个角色! (通过charAt()

请注意,length()的注释掉检查应之前现有字符检查。

您可能还想检查是否返回了返回的空字符串,具体取决于您的框架/解决方案等。请注意Apache Commons StringUtils.isEmpty()方法,它可以简洁地执行此检查。

答案 1 :(得分:3)

你必须检查null和长度大于0。

 if (tStockPIStart!=null && tStockPIStart.getText().length()>0 && tStockPIStart.getText().charAt(0)>='A' && tStockPIStart.getText().charAt(0)<='Z'){

答案 2 :(得分:2)

尝试

if (tStockPIStart.getText().length() > 0 && tStockPIStart.getText().charAt(0)>='A' && tStockPIStart.getText().charAt(0)<='Z')

在您的情况下,如果文本为空,则返回的长度将为0.因此charAt(..)方法将引发异常。因此,您应首先检查您要比较的文本是否为空。

答案 3 :(得分:2)

添加

if (tStockPIStart!=null && tStockPIStart.length>0) {
    [...]
}

答案 4 :(得分:0)

在Java 7中,您可以使用isEmpty方法在代码中使表达更具表现力

if (tStockPIStart.getText()!=null && !tStockPIStart.getText().isEmpty()) {
    //do stuff
}

这与做length != 0相同,但我个人认为更清楚。