检查字符串是否包含特定字符的最有效方法

时间:2019-09-18 13:57:34

标签: java string validation

我有一个只能包含特定字符的字符串:{}()[]

我创建了一个validate方法,该方法检查字符串是否包含禁用字符(按禁用字符,我指的是不是{}()[]的所有内容)

这是我的代码:

private void validate(String string) {

    char [] charArray = string.toCharArray();
    for (Character c : charArray) {
        if (!"{}()[]".contains(c.toString())){
            throw new IllegalArgumentException("The string contains forbidden characters");
        }
    }
}

我想知道是否存在更好的方法,因为我的方法似乎不正确。

3 个答案:

答案 0 :(得分:4)

如果我采用了实现此方法的方式,我将对其进行如下修改:

private static void validate(String str) {
    for (char c : str.toCharArray()) {
        if ("{}()[]".indexOf(c) < 0){
            throw new IllegalArgumentException("The string contains forbidden characters");
        }
    }
}

更改如下:

  • 未为char数组声明临时变量。
  • 使用indexOf查找字符,而不是将c转换为String以使用.contains()

  • 由于不再需要基元char,因此不再需要 toString()

  • 不命名参数string,因为这会引起混淆,不是一种好习惯。

注意:contains调用indexOf(),因此从技术上讲,这也为您节省了每次迭代的方法调用。

答案 1 :(得分:1)

如果您使用的是Java 8,我建议您使用Stream。 这样您可以将char省略为String拳击内容。

auto op = add ? (increase ? +[](const T& lhs, const T& rhs) { return lhs + rhs; }
                          : +[](const T& lhs, const T& rhs) { return lhs - rhs; })
              : (increase ? +[](const T& lhs, const T& rhs) { return lhs * rhs; }
                          : +[](const T& lhs, const T& rhs) { return lhs / rhs; });

数字为ASCII codes表示禁止使用的字符,如果需要,您可以将其替换为字符:

private void validate_stream(String str) {
        if(str.chars().anyMatch(a -> a==125||a==123||a==93||a==91||a==41||a==40))
            throw new IllegalArgumentException("The string contains forbidden characters");
}

答案 2 :(得分:-1)

我希望这对您有用:我已经将代码和您的代码一起添加了。

我使用了正则表达式模式,其中\\转义了括号,这在正则表达式中具有特殊含义。并使用字符串的match方法,它尝试使用给定的reg ex模式匹配给定的字符串值。在这种情况下,如我们使用not(!)一样,如果我们给定字符串"{}()[]as",则它满足if not条件并显示“ not match”,否则,如果我们给定字符串诸如"{}()[]",否则大小写将打印。您可以通过引发异常来更改此设置。

private static void validate(String string)
{

    String pattern = "\\{\\}\\(\\)\\[\\]";
    if(!string.matches(pattern)) {
        System.out.println("not matched:"+string);
    }
    else {
        System.out.println("data matched:"+string);
    }
    char [] charArray = string.toCharArray();
    for (Character c : charArray) {
        if (!"{}()[]".contains(c.toString())){
            throw new IllegalArgumentException("The string contains forbidden characters");
        }
    }
}

所有方括号都是Meta字符,此处引用: http://tutorials.jenkov.com/java-regex/index.html