||运算符不能在equalsIgnoreCase()方法参数中使用?

时间:2012-12-06 17:47:29

标签: java

boolean hasTaxes(){
        return !state.equalsIgnoreCase("TX" || "NM" ||"VA" || "AZ" || "AK");
    }

在上面的代码中,我遇到了The operator || is undefined for the argument type(s) java.lang.String, java.lang.String错误...这是否意味着||运算符不能用于equalsIgnoreCase()参数?

6 个答案:

答案 0 :(得分:2)

||期望双方boolean参数,而不是String,您可能想要

state.equalsIgnoreCase("TX") || state.equalsIgnoreCase("NM") || ..

如果这些是您可能需要检查的固定代码,则应将它们放入Enum并使用它

public enum StateCode{
 CA, TX;
}

现在

TaxableStateCode stateCode = null;
try{
    stateCode = TaxableStateCode .valueOf(stringCode);
} catch(IlligalArgumentException ex){
   //log why it failed and other things you might want to do
}

if(stateCode == null){
  // invalid code was supplied for TaxableStateCode 
}

如果预计它们会随时间变化,那么您应该将它们放在数据库或可配置属性文件中的某个位置,这样您就不必更改代码以应用效果

答案 1 :(得分:2)

equalIgnoreCase()的参数是一个String。 “TX”|| “NM”||“VA”|| “AZ”|| “AK”不是字符串,因此您将获得未定义的参数。 我建议将所有这些状态放在一个数组中,检查数组是否包含文本,而不是对每个状态使用equalIgnoreCase()

答案 2 :(得分:2)

您正尝试在不起作用的字符串上使用||运算符。试试这个

return !state.equalsIgnoreCase("TX") &&
!state.equalsIgnoreCase("NM" ) &&
!state.equalsIgnoreCase("VA") &&
!state.equalsIgnoreCase("AZ" ) &&
!state.equalsIgnoreCase("AK");

您必须将||运算符与布尔值一起使用,这是equalsIgnoreCase方法返回的值。

答案 3 :(得分:2)

Java不支持这样的想法(||是java的逻辑OR运算符),但是你可以这样做:

private static List<String> states = Arrays.asList("TX", "NM", "VA", "AZ", "AK");

然后在你的方法中:

return !states.contains(state.toUpperCase());

或多或少地抓住了你的想法。

编辑:

我真的很想保持这个简单,所以我不会吓唬OP,但人们已经插话,所以这里......

如果你想提高执行速度,HashSet是一个更好的选择,可以用作集合类型,所以你会这样做:

private static Set<String> states = new HashSet(
    Arrays.asList("TX", "NM", "VA", "AZ", "AK"));

如果你想完全坚持风格,你可以这样做:

private static final Set<String> STATES = Collections.unmodifiableSet(
    new HashSet(Arrays.asList("TX", "NM", "VA", "AZ", "AK")));

答案 4 :(得分:0)

||适用于boolean个操作数,而不适用于String s。

您可以更清晰地重新编写代码:

    enum Tax {TX, NM, VA, AZ, AK}

    boolean hasTaxes(String state) {
        for (Tax tax : Tax.values()) {
            if (state.equalsIgnoreCase(tax.name())) {
                return false;
            }
        }
        return true;
    }

答案 5 :(得分:0)

我想你可以试试这个:

String states = "@TX@NM@VA@AZ@AK@";
if(noTaxStates.length() ==2 && 
                          states.indexOf("@"+noTaxStates.toUpperCase()+"@") >0){
     //state exist
}