2016-04-24 109 views
0

我想要下面的if语句来比较多个字符串,但是当我比较多个字符串时,它会给我创建的错误消息。下面是不起作用的代码。如何将文本输入与多个字符串进行比较?

的变量是测试= 'c3400553' 和TEST2 = 'c3400554'

if (!uname.getText().toString().matches("[cC][0-9]{7}") || 
    !uname.getText().toString().equals(test) || 
    !uname.getText().toString().equals(test2) 
    ) { 
    uname.setError("Incorrect ID Format"); 
} 

下面是一个适用于一个比较的代码。

String test = "c3400553"; 
... 

if (!uname.getText().toString().matches("[cC][0-9]{7}") || 
     !uname.getText().toString().equals(test) 
     ) { 
      uname.setError("Incorrect ID Format"); 
} 

我不明白的问题是

+1

检查条件。确保在需要的地方使用'&&'和'||'。还要检查'!'(不是操作符)的用法。首先,提供一个[mcve] – Idos

+0

uname引用来自用户输入的编辑文本字段 –

+0

“多字符串测试”中的条件将始终返回true。这有点像(x!= 1)|| (x!= 2)其中你真正想要的是(x!= 1)&&(x!= 2)。在你的情况下你可能想要的是:(!uname.getText()。toString()。matches(“ ()。)()[] [cC] [0-9] {7}“)&&(!uname.getText()。toString()。equals(test)&& !uname.getText()。toString()。equals(test2))) –

回答

1

那是因为你需要取出一些!,或者你需要你的||通过&&更换。

这取决于你想达到的目标。如果你想被宣布为不正确的ID,如果它不符合格式,如果它不等于test并且也不等于test2,则该解决方案是这样的:

if (!uname.getText().toString().matches("[cC][0-9]{7}") && 
    !uname.getText().toString().equals(test) && 
    !uname.getText().toString().equals(test2)) { 

     uname.setError("Incorrect ID Format"); 
} 

否则,如果你想要做的是检查是否UNAME的格式相匹配,并且不等于测试和TEST2,那么问题是,你需要测试和测试2比较之前删除!

if (!uname.getText().toString().matches("[cC][0-9]{7}") || 
    uname.getText().toString().equals(test) || 
    uname.getText().toString().equals(test2)) { 

    uname.setError("Incorrect ID Format"); 
} 
相关问题