JAVA(Android) - 比较两个字符串,即使它们相同也返回false

时间:2013-11-23 22:31:44

标签: java android if-statement

在比较2个EditText框的字符串时,我遇到了一些问题。 这是JAVA:

public void signUpSubmit(View v){
    ErrorBox.setText("");
    String eAdd = EmailAddress.getText().toString();
    String eAddConf = ConfirmEmail.getText().toString();
    String pass = Password.getText().toString();
    String passConf = ConfirmPassword.getText().toString();
    String fName = FirstName.getText().toString();
    String lName = LastName.getText().toString();

    Boolean emailSame;
    Boolean passSame;
    Boolean emailEmpty;
    Boolean passEmpty;
    Boolean fNameEmpty;
    Boolean lNameEmpty;

    if(eAdd.equals(eAddConf)){
        emailSame = true;
    }else{
        emailSame = false;
    }
    if(pass.equals(passConf)){
        passSame = true;
    }else{
        passSame = false;
    }
    if(eAdd.equals("")){
        emailEmpty = true;
    }else{
        emailEmpty = false;
    }
    if(pass.equals("")){
        passEmpty = true;
    }else{
        passEmpty = false;
    }
    if(fName.equals("")){
        fNameEmpty = true;
    }else{
        fNameEmpty = false;
    }
    if(lName.equals("")){
        lNameEmpty = true;
    }else{
        lNameEmpty = false;
    }

    Boolean noErrors;
    String ErrorCode = null;
    if(emailEmpty==true){
        noErrors=false;
        ErrorCode = "Email is Empty";
    }else if(fNameEmpty==true){
        noErrors=false;
        ErrorCode = "First name is Empty";
    }else if(lNameEmpty==true){
        noErrors=false;
        ErrorCode = "Last Name is Empty";
    }else if(passEmpty==true){
        noErrors=false;
        ErrorCode = "Password is Empty";
    }else if(emailSame==true){
        noErrors=false;
        ErrorCode = "Emails Don't Match";
    }else if(passSame==true){
        noErrors=false;
        ErrorCode = "Passwords Don't Match";
    }else{
        noErrors=true;
    }
    if (noErrors==false){
        ErrorBox.setText(ErrorCode);
    }else{
        String signUpStatus = signUpHttp(eAdd, pass, fName, lName);
        if (signUpStatus.equals("Error")){
            ErrorBox.setText("Server Down, Please Try Again Later");
        }else if (signUpStatus.equals("False")){
            ErrorBox.setText("That Email has already been used");
        }else if (signUpStatus.equals("True")){
            MainActUN.setText(eAdd);
            MainActPW.setText(pass);
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
        }
    }
}

我确实在他们自己的函数中有重复的if语句,但我这样做是为了看它是否能解决我的问题,但事实并非如此,非常感谢任何帮助。

EDIT ----------------------------------

很抱歉没有具体,如果所有文本框都已填写,我知道电子邮件不匹配,我已经删除了电子邮件测试,同样的事情发生了说密码不匹配,但其余的.equals(“”)没问题。

1 个答案:

答案 0 :(得分:0)

让我看看我的面食代码阅读技巧是否准确。看看你在这做什么:

if(pass.equals(passConf)){
        passSame = true;
}else{
        passSame = false;
}

用简单的英语:“如果密码和密码确认匹配,则passSame为真”

现在来到这里:

}else if(passSame==true){
    noErrors=false;
    ErrorCode = "Passwords Don't Match";

您是不是要将noErrors设置为true?

即使密码和密码确认通过了您的测试(它们确实相同),您也会将传递条件设置为失败的测试。你正在为你的电子邮件和电子邮件确认做同样的事情。

字符串测试有效,但您的代码将传递测试标记为失败。字符串比较没有错,但是你的逻辑有问题。

仅仅是为了将来,程序员之间有一个很好的(最终毫无意义的)争论,即开放的花括号应该在它自己的行上还是在前一行的末尾。然而,关于闭合大括号的位置没有争论。

}else{

只是很难看的代码。我必须同意你需要删除所有这些冗余的东西。我知道你是为了进行测试而做的,但是你会让我们看到一些严肃的风格恶劣的代码,这不是一件好事,因为你要求我们免费查看 。使用更多的空格 - 您的代码将更容易阅读。

编写紧凑代码(或者像Java一样紧凑)。匹配,测试等都可以通过几行代码完成。 Java本身就是一种冗长的语言。