我想知道诸如“equi-distant”或“they are”之类的字符串是否包含非单词字符。有没有一种简单的方法来检查它?
答案 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已经改变了?