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

如何在Java中检查单个单词中的非单词字符?,java,string,Java,String,我想知道诸如“等距”或“它们”之类的字符串是否包含非单词字符。有没有一个简单的方法来检查它?这完全取决于你所说的“单词字符”是什么意思 如果“单词字符”是指A-Z或A-Z,则可以使用: bool containsNonWordCharacter = s.matches(".*[^A-Za-z].*"); 如果您的意思是“在Unicode中被认为是字母的任何字符”,请改为查看 这是近几家公司提供的代码: 但是,请参见文档: 注意:此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符

我想知道诸如“等距”或“它们”之类的字符串是否包含非单词字符。有没有一个简单的方法来检查它?

这完全取决于你所说的“单词字符”是什么意思

如果“单词字符”是指A-Z或A-Z,则可以使用:

bool containsNonWordCharacter = s.matches(".*[^A-Za-z].*");
如果您的意思是“在Unicode中被认为是字母的任何字符”,请改为查看

这是近几家公司提供的代码:

但是,请参见文档:

注意:此方法无法处理补充字符。要支持所有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;
}
public静态布尔hasnowercharacter(字符串s){
int offset=0,strLen=str.length();
while(偏移量
不带正则表达式的解决方案(对于这样一个非常简单的检查,通常更快):


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


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

Java正则表达式\w不支持unicode\b确实支持java下的unicode。我认为大多数风格的正则表达式都支持标准符号[A-Za-z0-9]。另外,Isleter只返回字母,而不返回数字和下划线……所以这对正则表达式下的“单词字符”不起作用……也许Java已经改变了?

这很有效,谢谢。你能给我解释一下这个表达的意思吗?我更愿意使用第二个定义,你是对的。但是句号和星号的用途是什么?@user104460:
*
=匹配任何东西。@Jeffrey:那是因为ó不在A-Z或A-Z中。看我的更新。@bobbymcr:酷,终于有投票了!今晚的观众非常激烈。。。作为感谢,我也会+1你的。for-each循环不能这样使用。字符串不是由字符组成的。@stratwine:你说得对,我修改了先获取字符数组的代码。这只适用于基本的多语言平面。看看我的答案,看看为什么。你所说的“字字符”是什么意思?你能说得具体点吗?
public static boolean hasNonWordCharacter(String s) {
    char[] a = s.toCharArray();
    for (char c : a) {
        if (!Character.isLetter(c)) {
            return true;
        }
    }

    return false;
}

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