我发现一些正则表达式的引用过滤掉了非英语,但none中的different是Java语言,除了它们都指的是{{3}}问题,而不是我想要的问题。解决:
true
的方法
如果一个字符串包含任何非英语
字符。“英文文本”不仅指实际的字母和数字,还指标点符号。
到目前为止,我能够为目标#1带来的非常简单:
String.replaceAll("\\W", " ")
事实上,这么简单,我怀疑我错过了什么......你是否发现了上述任何警告?
至于目标#2,我可以在上面的trim()
之后简单地replaceAll()
字符串,然后检查它是否为空。但是......有更有效的方法吗?
答案 0 :(得分:4)
事实上,这么简单,我怀疑我错过了什么......你是否发现了上述任何警告?
\W
相当于[^\w]
,而\w
相当于[a-zA-Z_0-9]
。使用\W
将替换所有内容,这不是字母,数字或下划线 - 如标签和换行符。这个问题是否真的取决于你。
“英文文本”不仅指实际的字母和数字,还指标点符号。
在这种情况下,您可能希望使用省略标点符号的字符类;
之类的东西[^\w.,;:'"]
创建一个方法,如果字符串包含任何非英语字符,则返回true。
Pattern p = Pattern.compile("\\W");
boolean containsSpecialChars(String string)
{
Matcher m = p.matcher(string);
return m.find();
}
答案 1 :(得分:2)
这对我有用
private static boolean isEnglish(String text) {
CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder();
CharsetEncoder isoEncoder = Charset.forName("ISO-8859-1").newEncoder();
return asciiEncoder.canEncode(text) || isoEncoder.canEncode(text);
}
答案 2 :(得分:1)
这是我的解决方案。我假设文本可能包含英文单词,标点符号和标准的ascii符号,如#,%,@等。
private static final String IS_ENGLISH_REGEX = "^[ \\w \\d \\s \\. \\& \\+ \\- \\, \\! \\@ \\# \\$ \\% \\^ \\* \\( \\) \\; \\\\ \\/ \\| \\< \\> \\\" \\' \\? \\= \\: \\[ \\] ]*$";
private static boolean isEnglish(String text) {
if (text == null) {
return false;
}
return text.matches(IS_ENGLISH_REGEX);
}
&#13;
答案 3 :(得分:0)
假设英文单词由以下字符组成:[a-zA-Z_0-9]
如果字符串包含任何非英语字符,则返回true,使用string.matches
:
return !string.matches("^\\w+$");