12.6 Java字符串删除所有非数字字符,但保留小数点分隔符| Java Debug 笔记

214 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:如何实现Java字符串删除所有非数字字符,但保留小数点分隔符

尝试删除所有非0-9和一个句点的字母和字符。我正在使用,Character.isDigit()但它也会删除小数点,如何还保留小数点?

回答1:

试试以下代码:

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

输出为12.334.78

回答2:

我会通过正则表达式解决问题:

String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);

回答3:

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

为点添加额外的字符检查'.'将解决以下要求:


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) || c == '.') {
            strBuff.append(c);
        }
    }
    return strBuff.toString();
}

实战回答

货币小数点分隔符可以与区域设置不同。.始终将其视为分隔符可能很危险。

╔════════════════╦═══════════════════╗
║    Locale      ║      Sample       ║
╠════════════════╬═══════════════════╣
║ USA            ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European       ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝

我认为正确的方法是:

1, DecimalFormatSymbols通过默认的Locale或指定的Locale获取十进制字符。

2, 用十进制字符借助正则表达式,以便仅获取数字

接下来是我的具体代码实现部分:

import java.text.DecimalFormatSymbols;
import java.util.Locale;

    public static String getDigit(String quote, Locale locale) {
    char decimalSeparator;
    if (locale == null) {
        decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
    } else {
        decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
    }

    String regex = "[^0-9" + decimalSeparator + "]";
    String valueOnlyDigit = quote.replaceAll(regex, "");
    try {
        return valueOnlyDigit;
    } catch (ArithmeticException | NumberFormatException e) {
        Log.e(TAG, "Error in getMoneyAsDecimal", e);
        return null;
    }
    return null;
}