有效字符串的长度返回0

时间:2014-07-08 17:47:27

标签: java string string-length

我有一个字符串

String A;

以及处理它的一些方法

public void setA(String A) throws AInvalidException{
    if(isAValid())
        this.A = A;
    throw new AInvalidException();
}

public boolean isAValid(){
    int aLength = getA().length();
    return b = (aLength==9) ? true: false;
}

public String getA(){
    return A;
}

当我尝试在主

中查看我的字符串的长度时
AClass.setA("123456789");

它说我的String无效,调试后我看到我的String长度为零。我可能做错了什么?

2 个答案:

答案 0 :(得分:5)

验证时,您正在从验证后设置的地方开始阅读

将其更改为

if(isAValid(A))

public boolean isAValid(String str){
    if(str == null) return false; //it could be null as well

    int aLength = str.length();
    return b = (aLength==9) ? true: false;
}

注意:您应遵循命名惯例

答案 1 :(得分:1)

当然String无效。

当您创建Foo的新实例时,Anull。当您致电setA时,setA会致电isAValid,但该方法会使用A的当前值:null

您需要参数化isValid

public class Foo {

    private String A;
    private boolean b;//??

    public boolean isAValid (String a) {
        int aLength = a.length();
        return b = (aLength==9) ? true: false;//why do you set b?
        //proposal: change to
        return (alength == 9);//and don't set b
    }

    public void setA(String A) throws AInvalidException{
        if(isAValid(A)) {
            this.A = A;
        } else {//add else, otherwise you will always throw an exception
            throw new AInvalidException();
        }
    }

    //...


}

此外,您还需要添加else语句,否则您的setA方法始终会抛出异常。

最后,为什么你使用return b = ...并不是crear,我认为b是某个领域。首先,大多数程序员都同意这样的语法非常混乱,接下来你通过执行检查来改变对象的状态,你最好在改变方法(setter)和检查方法(getter等)中分割方法......

为什么使用(condition) ? true : false也很不清楚。由于条件已经返回truefalse,您可以简单地说明:return condition,或者在您的情况下return b = condition