0
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()参数?

4

6 回答 6

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 
}

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

于 2012-12-06T17:49:14.523 回答
2

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

于 2012-12-06T17:50:38.880 回答
2

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

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

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

于 2012-12-06T17:50:55.243 回答
2

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

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

然后在你的方法中:

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

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

编辑:

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

如果您想提高执行速度,HashSet将 a 用作集合类型将是更好的选择,因此您可以这样做:

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")));
于 2012-12-06T17:54:08.490 回答
0

||适用于boolean操作数,从不Strings。

您可以以更简洁的方式重新表述您的代码,如下所示:

    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;
    }
于 2012-12-06T17:54:23.363 回答
0

我想你可以试试这个:

String states = "@TX@NM@VA@AZ@AK@";
if(noTaxStates.length() ==2 && 
                          states.indexOf("@"+noTaxStates.toUpperCase()+"@") >0){
     //state exist
}
于 2012-12-06T17:56:14.193 回答