Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用空字符串替换所有非字母数字字符_Java_Regex_Non Alphanumeric - Fatal编程技术网

Java 用空字符串替换所有非字母数字字符

Java 用空字符串替换所有非字母数字字符,java,regex,non-alphanumeric,Java,Regex,Non Alphanumeric,我试过用这个,但没用- return value.replaceAll("/[^A-Za-z0-9 ]/", ""); 使用[^A-Za-z0-9] 注意:删除了空格,因为它通常不被视为字母数字 return value.replaceAll("[^A-Za-z0-9 ]", ""); 这将保留完整的空间。我想这就是你想要的。否则,请从正则表达式中删除空格。请重试 return value.replaceAll("[^A-Za-z0-9]", ""); 或 Java的正则表达式不需要在正则

我试过用这个,但没用-

return value.replaceAll("/[^A-Za-z0-9 ]/", "");

使用
[^A-Za-z0-9]

注意:删除了空格,因为它通常不被视为字母数字

return value.replaceAll("[^A-Za-z0-9 ]", "");
这将保留完整的空间。我想这就是你想要的。否则,请从正则表达式中删除空格。

请重试

return value.replaceAll("[^A-Za-z0-9]", "");


Java的正则表达式不需要在正则表达式周围放置正斜杠(
/
)或任何其他分隔符,例如,与Perl等其他语言不同

我使用此方法创建文件名:

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();
}

您也可以尝试以下更简单的正则表达式:

 str = str.replaceAll("\\P{Alnum}", "");

您应该知道,
[^a-zA-Z]
将替换不在字符范围a-Z/a-Z中的字符。这意味着像
é
ß
等特殊字符或西里尔字母等将被删除

如果不需要替换这些字符,请使用预定义的字符类:

 str.replaceAll("[^\\p{IsAlphabetic}\\p{IsDigit}]", "");
PS:
\p{Alnum}
无法达到此效果,其作用与
[A-Za-z0-9]
简单方法相同:

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 "";
    }
}
输出:衣原体ppiggigmigaabs8006


GITHUB:

< P>如果您还希望允许不属于ASCII字符集的字母数字字符,例如德语UMLUUT,可以考虑使用以下解决方案:

 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("");
output = CharMatcher.javaLetterOrDigit().retainFrom(input);

请注意,使用UNICODE_CHARACTER_CLASS标志可能会对性能造成影响(请参阅此标志的javadoc)

使用Guava,您可以轻松地组合不同类型的标准。对于您的特定解决方案,您可以使用:

value = CharMatcher.inRange('0', '9')
        .or(CharMatcher.inRange('a', 'z')
        .or(CharMatcher.inRange('A', 'Z'))).retainFrom(value)
解决方案:
value.replaceAll([^A-Za-z0-9],”)

说明:
[^abc]
当插入符号
^
显示为方括号内的第一个字符时,它将否定模式。此模式匹配除a、b或c之外的任何字符

将关键字视为两个函数:

  • [(模式)]=匹配(模式)
  • [^(模式)]=不匹配(模式)
此外,关于模式:

  • A-Z=从A到Z包含的所有字符

  • a-z=从a到z包含的所有字符

  • 0=9=从0到9的所有字符

因此,它将替换模式中未包含的所有字符

番石榴提供了一个简洁的解决方案:

 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("");
output = CharMatcher.javaLetterOrDigit().retainFrom(input);


字符类末尾的空格也不应为空。reg exp正常,只需从值的regexp字符串中删除“/”。replaceAll(“/[^A-Za-z0-9]/”,”);对.replaceAll进行赋值(“[^A-Za-z0-9]”,“”);您不需要在regexp中使用“/”,我认为您混淆了javascript模式,因为它只适用于拉丁字母,不适用于重音字符或任何“特殊”字符集。带下划线,
return value.replaceAll(\\W“,”)当然。编译器非常擅长发现这类东西。第二个编译器无法回答这个问题。像:/\etc这样的角色呢?这是一种蛮力。正则表达式是符合OP情况的方法。你是对的,正则表达式更好。但当时,我和regex相处得不好。哈,有人真的和regex相处得那么好吗?;)伙计们,你们忘了除了拉丁字母以外还有其他字母。但是,如果你们想验证主机名,这将有助于排除无效的字母。非常感谢这篇文章——它对我非常有用。此外,我相信这就是问题的实际答案。拉丁字母表不是世界上唯一的!实际上,声明的正则表达式将“^”视为有效字符,因为只有第一次出现的“^”否定了选择的含义<代码>[^\\p{IsAlphabetic}\\p{IsDigit}]
运行良好。@JakubTurcovsky将IsAlphabetic和IsDigit定义为二进制属性。Alpha和Digit是POSIX字符类(仅限US-ASCII)。除了指定了标志之外。@AndreSteingress Correct,原因是
{IsDigit}
对我不起作用,而
{Digit}
对我起作用是因为我正在Android上尝试这个。Android默认启用了
UNICODE\u CHARACTER\u CLASS
。感谢您的许可。如何只允许字母、数字和表情符号?或者,保留空白:
str.replaceAll([^\\p{Alnum}\\s],”)
\\p{Alnum}\\p{Space}