如何在 java 中使用哈希集来确定字符串是否包含有效字符



我正在编写一个词法分析器,从未使用过哈希集。我想拿一个字符串并确保它是合法的。我想我了解如何使用有效字符构建哈希集,但我不确定如何将字符串与哈希集进行比较以确保它包含有效字符。我在任何地方都找不到例子。有人可以指出我会这样做的代码吗?

HashSet 为此提供了函数 contains(),因为它实现了 Collection 接口。

您不能将整个字符串与HashSet<Character>进行比较,但可以一次比较一个字符:

HashSet<Character> valid = new HashSet<Character>();
valid.add('a');
valid.add('d');
valid.add('f');
boolean allOk = true;
for (char c : "fad".toCharArray()) {
    if (!valid.contains(c)) {
        allOk = false;
        break;
    }
}
System.out.println(allOk);

但是,这不是最有效的方法。更好的方法是使用您需要的字符构造一个正则表达式,并在字符串上调用match()

// Let's say x, y, and z are the valid characters
String regex = "[xyz]*";
if (myString.matches(regex)) {
    System.out.println("All characters in the string are in 'x', 'y', and 'z'");
}

我想你可能想多了这个问题。 (例如,花太多时间思考如何使词法分析器"高效"......

在词法分析器中测试有效/无效字符的常规方法是:

  • 使用大开关语句,或

  • 执行一系列"字符类"测试;例如,使用Character.getType(char)的结果

或者更好的是,使用词法分析生成器。

<小时 />

使用哈希集既不比switch更有效或更具可读性。 而且"字符类"方法可能比两者更具可读性......具体取决于您的验证规则。

最新更新