在字符串中用空字符替换所有非数字字符

20
public static String removeNonDigits(final String str) {
   if (str == null || str.length() == 0) {
       return "";
   }
   return str.replaceAll("/[^0-9]/g", "");
}

我只想得到数字并返回,但结果并不如预期!有什么建议吗?


如果你看一下String.replaceAll方法,你会发现它在做Pattern.compile(regex).matcher(this).replaceAll(replacement),如果你经常这样做的话,这是低效的。更好的方法是将编译后的模式提取为一个常量。 - kfox
5个回答

50

Java不是Perl :) 请尝试"[^0-9]+"


@whyoz:请提出一个新问题。 - Aaron Digulla
@whyoz:没有人会在评论中找到答案。 - Aaron Digulla
"[^0-9.]+"将保留小数,如果您偶然需要这样做,请参考此帖子。 - whyoz
@AaronDigulla:如何包括负数?我的意思是,我必须用空格替换所有不是正/负数的内容。怎么做? - Pankaj Singhal
@PankajSinghal:我几乎可以确定这是无法通过正则表达式实现的。我建议您提出一个新问题,也许有人知道一些技巧。 - Aaron Digulla
显示剩余2条评论

18

试试这个:

public static String removeNonDigits(final String str) {
   if (str == null || str.length() == 0) {
       return "";
   }
   return str.replaceAll("\\D+", "");
}

你需要转义斜杠(为了Java的缘故,而不是正则表达式):"\D+" - Jon Skeet

7

在输入字符串为 enumValue 的情况下,请使用以下内容。

enumValue.replaceAll("[^0-9]","")

这将会把字符串中的所有非数字字符替换为“”。例如:输入为_126576,输出将会是126576。希望这有所帮助。

2
public String replaceNonDigits(final String string) {
    if (string == null || string.length() == 0) {
        return "";
    }
    return string.replaceAll("[^0-9]+", "");
}

这可以满足您的需求。

0
我建议在这种情况下只需对字符串进行一个小循环。
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
    char ch = s.charAt(i);
    if (ch =='0' || ch == '1' || ch == '2' ...) {
        sb.add(ch);
    }
}
return sb.toString();

5
在我看来,Character.isDigit(...)是比'(ch =='0' || ch == '1' || ch == '2'....)'更好的选择。 - Bart Kiers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接