如何检查Java中单个单词中的非单词字符?

时间:2011-11-13 22:56:58

标签: java string

我想知道诸如“equi-distant”或“they are”之类的字符串是否包含非单词字符。有没有一种简单的方法来检查它?

4 个答案:

答案 0 :(得分:6)

没有正则表达式的解决方案(对于像这样非常简单的检查通常更快):

public static boolean hasNonWordCharacter(String s) {
    char[] a = s.toCharArray();
    for (char c : a) {
        if (!Character.isLetter(c)) {
            return true;
        }
    }

    return false;
}

答案 1 :(得分:2)

完全取决于“字符”的含义。

如果用“单词字符”表示A-Z或a-z,那么你可以使用它:

bool containsNonWordCharacter = s.matches(".*[^A-Za-z].*");

如果您的意思是“任何被认为是Unicode字母的字符”,请改为Character.isLetter

这是由bobbymcr 提供的代码几乎:

public static boolean hasNonWordCharacter(String s) {
    char[] a = s.toCharArray();
    for (char c : a) {
        if (!Character.isLetter(c)) {
            return true;
        }
    }

    return false;
}

但请参阅文档:

  

注意:此方法无法处理补充字符。要支持所有Unicode字符(包括增补字符),请使用isLetter(int)方法。

这适用于所有Unicode字符:

public static boolean hasNonWordCharacter(String s) {

    int offset = 0, strLen = str.length();
    while (offset < strLen) {
        int curChar = str.codePointAt(offset);
        offset += Character.charCount(curChar);
        if (!Character.isLetter(curChar)) {
            return true;
        }
    }

    return false;
}

答案 2 :(得分:2)

我喜欢非正则表达方式。但是使用正则表达式可以这样写 -


private static boolean containsNonWord(String toCheck) {
        Pattern p = Pattern.compile("\\w*");
        return !p.matcher(toCheck).matches();
    }

答案 3 :(得分:0)

Java正则表达式\ w不支持unicode。 \ b确实支持java下的unicode。我认为大多数正则表达式都支持标准的符号[A-Za-z0-9_]。另外isLetter只返回字母而不是数字和下划线...所以这不适用于&#34;字符&#34;在正则表达式下......也许Java已经改变了?