我有一个静态字符串列表:
static final String FOO = "foo";
static final String BAR = "bar";
static final String DUH = "DUH";
static final String GOO = "goo";
static final String ZUT = "zut";
我想检查一个给定的字符串是否属于此列表的一部分,但是希望保持可能性分别引用每个项目。我希望检查实现不知道单个项目。所以不喜欢这样:
boolean isValid(String item) {
return (item.equalsIgnoreCase(FOO) || item.equalsIgnoreCase(BAR) || ......)
}
日Thnx! Bas Hendriks
答案 0 :(得分:6)
创建一个包含所有字符串的数组,并使用for循环检查其中一个是否与输入字符串匹配。
答案 1 :(得分:2)
根据您的约束,您应该使用Set或Map
一个。 Set <String>
stringSet使用 stringSet.contains(foo)来检查字符串是否在集合中退出
B中。 Map<String,String>
stringMap并使用 StringMap.containsKey(foo)来检查字符串是否在Map中退出;
答案 2 :(得分:0)
创建一个final
,Set
Strings
的{{1}}来办理登机手续:
private static final Set<String> STRINGS =
Collections.unmodifiableSet(new HashSet<String>(
Arrays.asList("foo", "bar", "DUH", "goo", "zut"));
public boolean isValid(String input) {
return STRINGS.contains(input);
}
如果您仅限于Java 1.4,那么只需删除所有泛型,它仍应以相同的方式工作。
如果您已经使用Guava(或者愿意包含它),那么您可以使该定义更好一点(但是Guava需要Java 1.5或更高版本):
private static final Set<String> STRINGS = ImmutableSet.of("foo", "bar", "DUH", "goo", "zut");
答案 3 :(得分:0)
另一种方法:使用静态方法创建一个Enum来检查项目是否有效:
enum MyEnum {
FOO("foo"),
BAR("bar"),
DUH("DUH");
private static final EnumSet<MyEnum> set = EnumSet.allOf(MyEnum.class);
private String name;
MyEnum(String name) {
this.name = name;
}
public static boolean isValid(String item) {
for (MyEnum e : set) {
if (e.name.equalsIgnoreCase(item)) {
return true;
}
}
return false;
}
}
要检查项目是否是您要调用的枚举的有效成员:
MyEnum.isValid(item);
答案 4 :(得分:0)
反射。收集在类中声明的所有静态final String字段,并构建一个set。