【问题标题】:Java substring keep only digits and decimal [duplicate]Java子字符串只保留数字和小数[重复]
【发布时间】:2015-10-19 15:37:12
【问题描述】:

我有需要从中删除尾随字符的字符串。有几种类型,这里有一些例子:

“82.882 英尺” “101英寸” “15.993ft³” “10.221 毫米”

等等。我需要删除长度分隔符,所以我会留下字符串:

“82.882” “101” “15.993” “10.221”

想法?

【问题讨论】:

  • 我有个想法:写代码。
  • 我没有看到使用子字符串函数的干净方法。
  • 1.找到不属于数字的第一个字符的索引(只有您可以准确地知道数字中允许哪些字符) 2. 将子字符串带到该点
  • 由于另一个答案的标题只说“非数字字符”,它没有指定它包含一个句点(非数字),因此我认为它不一样.仔细观察,他们确实包括了那个时期。

标签: java string


【解决方案1】:

尝试在字符串上使用 replaceAll,指定所有非小数点或数字的字符:

myString = myString.replaceAll("[^0-9\\.]","");

"^0-9\."表示不是数字 0 到 9 或小数的所有字符。我们放置两个斜杠的原因是为了逃避句点,因为它在 Java 正则表达式中的含义与文字字符“.”不同。

【讨论】:

  • 实际上没有必要在字符类中转义.
【解决方案2】:

只需使用正则表达式:

String result = input.replaceAll("[^0-9.]", "");

【讨论】:

    【解决方案3】:

    正则表达式可能最适合这种情况。

        Pattern lp = Pattern.compile("([\\d.]+)(.*)");
    
        // Optional cleanup using Apache Commons StringUtils
        currentInput = StringUtils.upperCase(
                StringUtils.deleteWhitespace(currentInput));
    
        Matcher lpm = lp.matcher(currentInput);
        if( lpm.matches() )
        {
            // Values
            String value = lpm.group(1);
    
            // And the trailing chars for further processing
            String measure = lpm.group(2);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      相关资源
      最近更新 更多