在静态最终字符串列表中查找项目

时间:2011-01-26 08:18:03

标签: java string static

我有一个静态字符串列表:

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

5 个答案:

答案 0 :(得分:6)

创建一个包含所有字符串的数组,并使用for循环检查其中一个是否与输入字符串匹配。

答案 1 :(得分:2)

根据您的约束,您应该使用Set或Map

一个。 Set <String> stringSet使用 stringSet.contains(foo)来检查字符串是否在集合中退出

B中。 Map<String,String> stringMap并使用 StringMap.containsKey(foo)来检查字符串是否在Map中退出;

答案 2 :(得分:0)

创建一个finalSet 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。