java - 用空字符串替换所有非字母数字字符
我尝试使用这个但没有工作 -
return value.replaceAll("/[^A-Za-z0-9 ]/", "");
12个解决方案
209 votes
使用[^A-Za-z0-9]。
注意:删除空格,因为通常不会将其视为字母数字。
Mirek Pluta answered 2019-04-05T01:20:25Z
113 votes
尝试
return value.replaceAll("[^A-Za-z0-9]", "");
要么
return value.replaceAll("[\\W]|_", "");
Andrew Duffy answered 2019-04-05T01:20:48Z
47 votes
return value.replaceAll("[^A-Za-z0-9 ]", "");
这将使空间保持不变。 我认为这就是你想要的。 否则,从正则表达式中删除空格。
erickson answered 2019-04-05T01:21:13Z
46 votes
您应该知道[^a-zA-Z]将替换字符范围A-Z / a-z中不属于自身的字符。 这意味着特殊字符,如é,ß等或西里尔字符等将被删除。
如果不需要替换这些字符,请使用预定义的字符类:
someString.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "");
PS:\p{Alnum}没有达到这个效果,它的作用与[A-Za-z0-9]相同。
Andre Steingress answered 2019-04-05T01:21:57Z
20 votes
你也可以尝试这个更简单的正则表达式:
str = str.replaceAll("\\P{Alnum}", "");
saurav answered 2019-04-05T01:22:23Z
10 votes
Java的正则表达式不需要在正则表达式周围放置正斜杠(/)或任何其他分隔符,例如,与其他语言(如Perl)相反。
abyx answered 2019-04-05T01:22:51Z
8 votes
我创建了这个方法来创建文件名:
public static String safeChar(String input)
{
char[] allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
char[] charArray = input.toString().toCharArray();
StringBuilder result = new StringBuilder();
for (char c : charArray)
{
for (char a : allowed)
{
if(c==a) result.append(a);
}
}
return result.toString();
}
zneo answered 2019-04-05T01:23:17Z
1 votes
简单方法:
public boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
public String normalizeOnlyLettersNumbers(String str) {
if (!isBlank(str)) {
return str.replaceAll("[^\\p{L}\\p{Nd}]+", "");
} else {
return "";
}
}
Alberto Cerqueira answered 2019-04-05T01:23:39Z
1 votes
public static void main(String[] args) {
String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";
System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));
}
输出:ChlamydiasppIgGIgMIgAAbs8006
Github:[https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java]
Albin answered 2019-04-05T01:24:13Z
1 votes
如果您还想允许不属于ascii字符集的字母数字字符,例如德语变音符号,您可以考虑使用以下解决方案:
String value = "your value";
// this could be placed as a static final constant, so the compiling is only done once
Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);
value = pattern.matcher(value).replaceAll("");
请注意,使用UNICODE_CHARACTER_CLASS标志可能会对性能造成影响(请参阅此标志的javadoc)
snap answered 2019-04-05T01:24:49Z
0 votes
使用Guava,您可以轻松组合不同类型的标准。 您可以使用以下特定解决方案:
value = CharMatcher.inRange('0', '9')
.or(CharMatcher.inRange('a', 'z')
.or(CharMatcher.inRange('A', 'Z'))).retainFrom(value)
Debmalya Biswas answered 2019-04-05T01:25:15Z
0 votes
解:
0=0 = all characters included from 0 to 9
说明:
0=0 = all characters included from 0 to 9 当插入符号^作为方括号内的第一个字符出现时,它会否定该模式。 此模式匹配除a或b或c之外的任何字符。
将关键字看作两个函数:
0=0 = all characters included from 0 to 9
0=0 = all characters included from 0 to 9
此外,关于模式:
0=0 = all characters included from 0 to 9
0=0 = all characters included from 0 to 9
0=0 = all characters included from 0 to 9
因此,它将替换模式中包含的所有char
GalloCedrone answered 2019-04-05T01:26:34Z