【问题标题】:How do I remove the non-numeric character from a string in java? [closed]如何从java中的字符串中删除非数字字符? [关闭]
【发布时间】:2010-12-04 18:07:49
【问题描述】:

我有一个很长的字符串。将数字拆分为数组的正则表达式是什么?

【问题讨论】:

  • 1.发布一个字符串示例 2. 是字符串还是数组还是字符串数组 (String[])? 2. 你想要什么?只需从字符串中删除非数字字符或将其删除并获取包含数字的数组
  • 请把这个问题说清楚。一些指针:显示字符串输入和字符串输出。改写第二句以使其更具解释性。您是否有多个由非数字分隔的数字?还是每个数字都应该分开?
  • 请看一下 [regexr.com/]。您将能够尝试任何正则表达式并查看正则表达式每个部分的功能分解,以及通过在本网站上使用不同的正则表达式来“自学”如何使用和使用正则表达式。希望它可以帮助干杯!

标签: java regex


【解决方案1】:

您是要删除还是拆分?这将删除所有非数字字符。

myStr = myStr.replaceAll( "[^\\d]", "" )

【讨论】:

  • myStr = myStr.replaceAll("[\\D]", "");
  • 不带方括号的版本:myStr.replaceAll("\\D+", ""),也许更具可读性。
【解决方案2】:

您将需要使用 String 类的 Split() 方法并传入正则表达式“\D+”,它将匹配至少一个非数字。

myString.split("\\D+");

【讨论】:

  • 这将删除所有数字字符并给出一个包含所有非数字字符的数组。这与要求的完全相反。
  • 哎呀,我一定是误解了问题的含义。在这种情况下,它将是正则表达式的否定版本,即 \\D+ 我将更新我的答案!
【解决方案3】:
String str= "somestring";
String[] values = str.split("\\D+"); 

【讨论】:

  • 与所有其他人相比,您的答案是最好的。直奔主题。
【解决方案4】:

另一种从字符串中删除所有非数字字符的方法:

String newString = oldString.replaceAll("[^0-9]", "");

【讨论】:

    【解决方案5】:

    这适用于 Flex SDK 4.14.0

    myString.replace(/[^0-9&&^.]/g, "");

    【讨论】:

      【解决方案6】:

      你可以使用如下递归方法:

      public static String getAllNumbersFromString(String input) {
              if (input == null || input.length() == 0) {
                  return "";
              }
              char c = input.charAt(input.length() - 1);
              String newinput = input.substring(0, input.length() - 1);
      
                  if (c >= '0' && c<= '9') {
                  return getAllNumbersFromString(newinput) + c;
      
              } else {
                  return getAllNumbersFromString(newinput);
              }
          } 
      

      【讨论】:

      • 这是一个很好的练习使用“递归”的练习。但在现实世界(编程世界)中,程序员会使用 RegEX! RegEX 已经存在了半个世纪。
      【解决方案7】:

      不使用正则表达式的简单方法:

      public static String getOnlyNumerics(String str) {
          if (str == null) {
              return null;
          }
          StringBuffer strBuff = new StringBuffer();
          char c;
          for (int i = 0; i < str.length() ; i++) {
              c = str.charAt(i);
              if (Character.isDigit(c)) {
                  strBuff.append(c);
              }
          }
          return strBuff.toString();
      }
      

      【讨论】:

      • 你的代码不简单!您应该使用正则表达式。 RegEX 是一个强大的工具,可以简化很多代码,你需要掌握 RegEX 并使用它。
      【解决方案8】:

      另一个正则表达式解决方案:

      string.replace(/\D/g,'');  //remove the non-Numeric
      

      同样,你可以

      string.replace(/\W/g,'');  //remove the non-alphaNumeric
      

      在 RegEX 中,符号 '\' 将使其后面的字母成为模板:\w -- 字母数字\W - Non-AlphaNumeric,当你大写字母时取反。

      【讨论】:

      • 是的,这是 javascript 代码,而不是 JAVA。 eveliotc 的答案是在 JAVA 中。 (请参阅下面的几个答案)
      【解决方案9】:

      Java 8 collection streams

      StringBuilder sb = new StringBuilder();
      test.chars().mapToObj(i -> (char) i).filter(Character::isDigit).forEach(sb::append);
      System.out.println(sb.toString());
      

      【讨论】:

        【解决方案10】:

        以前的答案会去掉你的小数点。如果您想保存您的小数,您可能需要

        String str = "My values are : 900.00, 700.00, 650.50";
        
        String[] values = str.split("[^\\d.?\\d]"); 
        // split on wherever they are not digits except the '.' decimal point
        // values: { "900.00", "700.00", "650.50"}  
        

        【讨论】:

        • 为什么\\d在字符类中放了两次? [^\\d.?\\d] 是一个否定字符类,它匹配任何不是数字、点或问号的字符。
        • Toto,我上面的解决方案被指定为在拆分时保存小数点,例如“900.50”——您不想将它们拆分为 {"900", "50"}
        • 好吧,那么[^\\d.] 就足够了,也一样。
        猜你喜欢
        • 2013-06-24
        • 2021-03-17
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 2021-12-25
        • 1970-01-01
        相关资源
        最近更新 更多