检查空字符串以进行错误检查

时间:2012-08-14 03:06:00

标签: java swing object methods if-statement

为什么此方法会导致运行时错误?我理解calc不会使用空字符串,所以如果是这样的话,我将小时设置为0.

呼叫:

String hoursJLabel = actionObject.calculateHours();
totalHours.setText(hoursJLabel);

方法:

public String calculateHours (){
    double sum = 0;
    double hour = 0;
    for (int i = 0; i < 7; i++) {
        if (hourArray[i].getText() != "") {
            hour = Double.parseDouble(hourArray[i].getText());
        }
        else  {
            hour = 0;
        }
    }
    sum += hour;
    return String.format("%.2f", sum);
}

3 个答案:

答案 0 :(得分:1)

要检查非空String是否为空,请使用length()方法:

if (hourArray[i].getText().length() == 0) ...

如果字符串可以是null,请在长度之前添加一个检查,如下所示:

String str = hourArray[i].getText();
if (str != null && str.length() == 0) ...

如果您使用Java-6或更高版本,则可以进一步简化:

String str = hourArray[i].getText();
if (str != null && str.isEmpty()) ...

答案 1 :(得分:1)

calculateHours()中有多种可能发生运行时错误:

  • hourArraynull并抛出NullPointerException
  • 任何hourArray[i]为空并抛出NullPointerException
  • hourArray[i].getText()无法解析为Double并抛出NumberFormatException
  • 您的hourArray可能包含少于7个元素,这会引发IndexOutOfBoundsException

除此之外,hourArray[i].getText() != ""是一个糟糕的比较,因为它不会检查null并检查这两个对象是否是同一个对象,而不是它们是否相等。

此外,我想您希望在循环中包含sum += hour,否则sum将包含hourArray的最后一个值。

所以,你的方法应该是这样的:

public String calculateHours (){
    double sum = 0;
    if(hourArray != null){ // hourArray might be null
        double hour = 0;
        for (int i = 0; i < hourArray.length; i++) { // use .length here
            // check for nulls and empty String
            if (hourArray[i] != null && hourArray[i].getText() != null 
                                     && !"".equals(hourArray[i].getText())) {
                try{ // the text might can not be parsed to a double
                    hour = Double.parseDouble(hourArray[i].getText());
                }catch(NumberFormatException ex){
                    hour = 0;
                }
            }
            else  {
                hour = 0;
            }
            sum += hour; // I guess you want that inside your loop
        }
    }
    return String.format("%.2f", sum);
}

无论如何,如果这个类的编写方式不需要在calculateHours()方法中检查所有这些可能性,那就更好了。你注意到如果必须在这里完成所有这些检查,那么阅读会有多难。

答案 2 :(得分:0)

FI:Apache commons StringUtils有一个方法isBlank,可以处理null,空和只有空格等的字符串,