如何检查String是否是以逗号分隔的Float?

时间:2016-02-09 08:50:00

标签: java regex

我有一个包含各种数据的字符串ArrayList。它充满了数字,十进制数字,简单字符串等等(但所有这些都存储为字符串)。

我的目标是创建一个正则表达式,它只匹配那些具有以下数据的字符串*,*(以逗号或简单整数分隔的浮点数):

"1"
"0" 
"120000"
"1,23133"
"21312,9"

我的第二个目标是当找到类似这样的东西时,正则表达式将返回false:

"[82903] some_text"
"Release 12.5"  //yes, it is separated by a dot

我正在尝试这种模式:

String pattern = "(\\d+(\\,\\d+)?)";

但在我的情况下,它无法正常工作。我正在尝试使用NumberFormat,但是当它看到“,”而不是“。”时会失败。

非常感谢您的帮助。

6 个答案:

答案 0 :(得分:5)

您可以尝试以下模式,下面是我的样本测试:

public static void main(String[] args) {
    String pattern = "([-+]?[0-9]*,?[0-9]+)";
    String x = "1,23132";

    System.out.println(x.matches(pattern));
}

答案 1 :(得分:2)

您可以尝试使用DecimalFormat查看此代码:

DecimalFormat decimalFormat = new DecimalFormat();

DecimalFormatSymbols commaSeperateFormat = new DecimalFormatSymbols();
commaSeperateFormat.setDecimalSeparator(',');

decimalFormat.setDecimalFormatSymbols(commaSeperateFormat );

String[] testCases = {"1", "0", "120000", "1,23133", "21312,9"};
for (String t : testCases) {
    Number parsedNumber = decimalFormat.parse(t);
    float theFloatNumber = parsedNumber.floatValue();

    System.out.println(theFloatNumber);
}

答案 2 :(得分:1)

您可以使用以下正则表达式(将其锚定到开头和结尾):

String pattern = "^(\\d+(?:,\\d+)?)$";

a demo on regex101.com。如果数字可以出现在字符串中的任何位置,那么您也可以使用字边界和替换:

String pattern = "\\b(?:\\d+\\.\\d+|(\\d+(?:,\\d+)?))\\b";

使用此方法仅使用第一组中捕获的数字,请参阅demo here

答案 3 :(得分:0)

String pattern = "([0-9\\.,])+"
boolean matches = "12525.52,5252,4525.3d".matches(pattern)

答案 4 :(得分:0)

我猜你也想抓住这两个部分吧?你可以试试这个:

String pattern = "([+-]?\\d+)(?:,(\\d+))?"

答案 5 :(得分:0)

这将删除所有非数字字符,并确定它是带有逗号作为小数分隔符还是点作为它的文化小数

public static decimal RemoveAllNonNumericCharacters(this string input)
    {
        CultureInfo culture = new CultureInfo("en");
        string regex = string.Empty;
        if (input.Contains(",") && input.Contains("."))
        {
            if (input.IndexOf(".") > input.IndexOf(","))
            {
                culture.NumberFormat.NumberDecimalSeparator = ".";
                regex = "[^-.0-9]";
            }
            else
            {
                culture.NumberFormat.NumberDecimalSeparator = ",";
                regex = "[^-,0-9]";
            }
        }
        else
        {
            if (input.Contains(",") && input.Split(',').Length == 2)
            {
                culture.NumberFormat.NumberDecimalSeparator = ",";
                regex = "[^-,0-9]";
            }

            if (input.Contains(".") && input.Split('.').Length == 2)
            {
                culture.NumberFormat.NumberDecimalSeparator = ".";
                regex = "[^-.0-9]";
            }
        }
        return decimal.Parse(Regex.Replace(input, regex, string.Empty), culture);
    }