Java String比较错误的结果

时间:2015-01-21 10:51:48

标签: java android string comparison

我正在尝试根据EditTexts是否实际更改来启用/禁用“保存”按钮,但我的字符串比较根本不起作用。

public void afterTextChanged(Editable editable) {
    String newSet = editable.toString();

    newSet = newSet.trim();
    if(!newSet.equals(ip) || !newSet.equals(port) || !newSet.equals(username) || !newSet.equals(password)){
        saveButton.setEnabled(true);
    }else{
        saveButton.setEnabled(false);
    }
}

它一直告诉我字符串是不同的,即使它们不是。即使我打印出来,我也会得到完全相同的字符串。

任何人都可以帮助我吗?

由于

4 个答案:

答案 0 :(得分:6)

您可能希望&&代替||

public void afterTextChanged(Editable editable) {
  String newSet = editable.toString().trim();

  saveButton.setEnabled(!newSet.equals(ip) && 
                        !newSet.equals(port) && 
                        !newSet.equals(username) && 
                        !newSet.equals(password)); 
}
如果saveButton 不是 ip,端口,用户名或密码,则

启用newSet

答案 1 :(得分:2)

newSet不能等于所有这四个字符串,除非所有4个字符彼此相等。因此,条件很可能会返回错误。

如果您要求newSet等于这4个字符串中的任何一个,那么正确的条件是:

if(!(newSet.equals(ip) || newSet.equals(port) || newSet.equals(username) || newSet.equals(password)))

答案 2 :(得分:2)

你应该这样写,更容易阅读:

if (!Arrays.asList(ip, port, username, password).contains(newSet))
{
    saveButton.setEnabled(true);
}
else
{
    saveButton.setEnabled(false);
}

或者:

saveButton.setEnabled(!Arrays.asList(ip, port, username, password).contains(newSet));

答案 3 :(得分:0)

||替换为&&

if(!newSet.equals(ip) && !newSet.equals(port) && !newSet.equals(username) && !newSet.equals(password))

原因:

OR(||) 如果任何条件得到满足,它将进入循环内部 AND(&&) 如果所有条件都满意,那么它只会进入循环内部。

在您的情况下,您需要满足所有条件,这就是使用和运算符而不是运算符的原因。