5

我有这个代码:

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')

任何帮助表示赞赏。谢谢

4

5 回答 5

7

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

如果是这样,那么不要试图拉出第一个字符!(通过charAt()

请注意,您的注释检查length()应在现有字符检查之前进行。

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

于 2012-10-29T09:19:42.163 回答
3

您必须检查 null 和长度是否大于 0。

 if (tStockPIStart!=null && tStockPIStart.getText().length()>0 && tStockPIStart.getText().charAt(0)>='A' && tStockPIStart.getText().charAt(0)<='Z'){
于 2012-10-29T09:21:30.873 回答
2

尝试

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

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

于 2012-10-29T09:21:06.630 回答
2

添加

if (tStockPIStart!=null && tStockPIStart.length>0) {
    [...]
}
于 2012-10-29T09:21:09.450 回答
0

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

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

这和做的一样,length != 0但我个人认为更清楚一点。

于 2012-10-29T09:28:30.257 回答