【问题标题】:Replace all non digits with an empty character in a string用字符串中的空字符替换所有非数字
【发布时间】:2010-12-01 23:01:52
【问题描述】:
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) 如果您经常这样做,效率会很低。更好的方法是将编译后的模式提取到常量中。

标签: java regex replace


【解决方案1】:

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

【讨论】:

  • @whyoz:请提出一个新问题
  • @whyoz:没有人会在评论中找到答案。
  • "[^0-9.]+" 将保留小数点,如果你碰巧看到这篇文章需要这样做
  • 我希望有一个Java中的Perl正则表达式
  • @AaronDigulla:如何也包含负数?我的意思是,我必须用空格替换所有不是正数/负数的东西。该怎么做?
【解决方案2】:

试试这个:

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

【讨论】:

  • 您需要转义斜杠(为了 Java,而不是正则表达式):“\\D+”
【解决方案3】:

使用下面的enumValue 是输入字符串。

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

这将获取字符串并将所有非数字数字替换为“”。

例如:输入为 _126576,输出为 126576。

希望这会有所帮助。

【讨论】:

    【解决方案4】:
    public String replaceNonDigits(final String string) {
        if (string == null || string.length() == 0) {
            return "";
        }
        return string.replaceAll("[^0-9]+", "");
    }
    

    这就是你想要的。

    【讨论】:

      【解决方案5】:

      对于这种特殊情况,我建议在字符串上使用一个小循环。

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

      【讨论】:

      • Character.isDigit(...) 比 '(ch =='0' || ch == '1' || ch == '2'....) ' 国际海事组织。
      猜你喜欢
      • 2010-12-20
      • 2011-11-23
      • 2012-10-10
      • 2010-09-20
      • 2012-09-04
      • 2018-11-25
      • 2018-07-09
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多