如果我有一个字符串
"ja.v_,a"
,我该如何去除所有非字母字符并输出 "java"
? 我已尝试使用str = str.replaceAll("\\W", "" )
,但没有成功。"ja.v_,a"
,我该如何去除所有非字母字符并输出 "java"
? 我已尝试使用str = str.replaceAll("\\W", "" )
,但没有成功。你能试试这个吗?
System.out.println("ja.v_,a".replaceAll("[^a-zA-Z]", "")) //java
正则表达式示例和教程总是给出[a-zA-Z0-9]+正则表达式来“验证字母数字输入”。它内置在许多验证框架中。但它是完全错误的。除非你有一个相当好的解释,否则此正则表达式不应该出现在你的代码中。然而,这个例子无处不在。相反,正确的正则表达式是[\p{L}0-9]+
所以在你的情况下,应使用:
str.replaceAll("[^\\p{L}]", "");
System.out.println("ja.v_,a".replaceAll("[^\\p{L}]", ""));
System.out.println("сл-=о-_=во!".replaceAll("[^\\p{L}]", ""));
\p{L}
指Unicode中的“字母”定义。
str.replaceAll("[^\p{L}]", "");
是无用的。你需要以某种方式使用结果。 - Andy Turner\p{L}
是 Unicode 中“字母”的定义。 - Dev-iL\P{M}\p{M}*+
来匹配一个或多个Unicode字符,因为带有变音符号的字母可能以不同的方式编码:现在您应该明白为什么\P{M}\p{M}*+等同于\X了。 \P{M}匹配不是组合标记的代码点,而\p{M}*+匹配零个或多个组合标记的代码点。要匹配包括任何变音符号的字母,请使用\p{L}\p{M}*+。这个正则表达式将始终匹配à,无论它如何编码。...
- WesternGunString test= "ja.v_,a";
int len=test.length();
String alphaString="";
for(int i=0; i<len; i++){
if (Character.isLetter(test.charAt(i))) {
alphaString=alphaString+test.charAt(i);
}
}
System.out.println(alphaString);
String s = "ja.v_,a";
s = s.replaceAll("[^a-z]", "");
System.out.println(s);
>java
[^a-z]
?(即所有非字母a..z
符号) - Dmitry Bychenkostr.replaceAll(...)
的结果,还是将其作为语句调用的? - Andy Turner