用于检查字符串是否包含特定字符的模式

时间:2013-12-13 17:57:08

标签: java regex string

老实说,我对模式知之甚少,但我需要一个让我知道myString中是否存在其中一个以及只有这些字符。

String myString = "thisMayContain/anything@";
String charactersIdontWant = "^àáâãäåçèéêëìíîïðòóôõöùúûüýÿ!&{}¿?.<>~\()";

谢谢。

3 个答案:

答案 0 :(得分:4)

您可以使用Apache的StringUtils中的containsAny():

boolean haveBadCharacters = StringUtils.containsAny(myString, charactersIdontWant);

如果你坚持使用模式,你可以使用:

Pattern badCharactersPattern = Pattern.compile("[àáâãäåçèéêëìíîïðòóôõöùúûüýÿ!&{}¿?.<>~\()^]");

(注意^移动到最后,因此不会将其解释为组否定指示符。)

答案 1 :(得分:1)

停止重新发明轮子。几年前Apache Commons Lang StringUtils解决了这个问题。转到api页面(点击链接)并查找 containsAny

答案 2 :(得分:0)

您可以使用String.indexOf(int)检查字符串中是否包含特定字符(如果字符不在其中,则返回-1)。

您可以使用String.toCharArray()获取您不想要的所有字符的数组,并按字符迭代此数组。

可读且简单的代码(尽管效率不高)将是:

private static boolean charsOK(String s) { 
    String charactersIdontWant = "^àáâãäåçèéêëìíîïðòóôõöùúûüýÿ!&{}¿?.<>~\\()";
    for (char c : charactersIdontWant.toCharArray()) {
        if (s.indexOf(c) != -1) return false;
    }
    return true;

}
public static void main(String[] args) {
    String myString = "thisMayContïain/anything@";
    String myString2 = "thisMayContain/anything@";
    System.out.println(charsOK(myString));
    System.out.println(charsOK(myString2));
}
相关问题