java正则表达式过滤掉非英文文本

Reg*_*kie 2 java regex

我发现了一些对正则表达式过滤掉非英语的引用,但它们都不是在 Java 中的,除了它们都指的是与我试图解决的问题有些不同的问题:

  1. 用空格替换所有非英文字符。
  2. 创建一个方法,该方法true 在字符串包含任何非英语字符时返回。

“英文文本”不仅指实际的字母和数字,还指标点符号。

到目前为止,我能够为目标 #1 带来的东西非常简单:

String.replaceAll("\\W", " ")
Run Code Online (Sandbox Code Playgroud)

事实上,如此简单以至于我怀疑我遗漏了什么......你在上面发现任何警告吗?

至于目标#2,我可以简单trim()的字符串上面replaceAll(),然后检查它是否是空的。但是......有没有更有效的方法来做到这一点?

Mat*_*all 5

事实上,如此简单以至于我怀疑我遗漏了什么......你在上面发现任何警告吗?

\W等价于[^\w]\w等价于[a-zA-Z_0-9]。Using\W将替换所有不是字母、数字或下划线的东西——比如制表符和换行符。这是否是一个问题真的取决于你。

“英文文本”不仅指实际的字母和数字,还指标点符号。

在这种情况下,您可能希望使用省略标点符号的字符类;就像是

[^\w.,;:'"]
Run Code Online (Sandbox Code Playgroud)

如果字符串包含任何非英语字符,则创建一个返回 true 的方法。

使用PatternMatcher

Pattern p = Pattern.compile("\\W");

boolean containsSpecialChars(String string)
{
    Matcher m = p.matcher(string);
    return m.find();
}
Run Code Online (Sandbox Code Playgroud)