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