Java替换字符

时间:2014-04-20 08:25:03

标签: java regex

这很简单,但我如何创建一个正则表达式去除除

之外的任何内容
  • 字母a-Z,
  • 数字0-9
  • 和逗号?

我认为前两个的正则表达式是[^a-zA-Z_0-9],但我怎么能为它添加逗号。

另外,它会是以下吗?

"string".replaceAll("expression", null);

4 个答案:

答案 0 :(得分:3)

首先,您不能将null用于替换值。它会给你java.lang.NullPointerException。你必须在那里使用字符串。例如,代替null使用空""

关于正则表达式,如果您需要在角色类[]中添加任何内容,只需将它们添加到那里即可。例如[^a-z,*.]

此外,您的a-zA-Z_0-9可以替换为\\w

[^\\w,]

答案 1 :(得分:1)

  • 您只需在negated character class

    中添加逗号即可
    [^a-zA-Z0-9,]
               ^ add this
    
  • 此外,字符串是不可变的,因此replaceAll不会影响原始字符串,但会创建具有替换字符的新字符串,因此您需要将其存储在某处(可能是对原始字符串的引用)。

  • 最后一件事是你需要传递空字符串""作为替换,而不是null

请尝试使用

yourString = yourString.replaceAll("[^a-zA-Z0-9,]","");

另一件事是您正在使用的正则表达式也会阻止_被删除。如果那是故意的,那么您可以简单地使用预定义的字符类_而不是a-z A-Z 0-9 \w(在Javas String中需要将其写为{ {1}}因为"\\w"需要转义)所以您的代码看起来像

\

答案 2 :(得分:0)

不,你应该这样做:

value = "string".replaceAll("[\\W_,]", "");

我的模式并没有使用否定。

您应该将其替换为空字符串,而不是null,并且您必须将结果分配给字符串,因为字符串是不可变的。

你可以简化你的正则表达式。

否则只需将,添加到否定的字符类中。

答案 3 :(得分:0)

[\w,]+是与字母数字,下划线和逗号匹配的正则表达式。

此处\w相当于[A-Za-z0-9_]

[\W,]+是正则表达式,它匹配除字母数字,下划线和逗号之外的所有内容。

此处\W - 匹配任何不是单词字符的字符(字母数字和下划线),等同于[^A-Za-z0-9_]