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()
参数?
答案 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
}