用“-”分割一个由数字范围组成的字符串

时间:2018-07-11 10:31:39

标签: java regex string split

我想用'-'来分隔包含范围的字符串,

示例

String range = "1 - 10";

我正在做这样的事情:

String[] s = range.split("-");

因此s[0]将具有起始值,而s[1]将具有终止值。

但这不适用于负数。

示例

String range = "-1 - -10";

如何处理负范围?

1 个答案:

答案 0 :(得分:8)

在这种情况下,我想使用Patterns而不是split,例如:

(-?\d+)\s*-\s*(-?\d+)

女巫的意思:

  • (-?\d+)匹配第一个负数或正数
  • \s*-\s*,然后是零个或多个空格,然后是一个连字符-(我注意到必须要有一个范围),然后是零个或多个空格
  • (-?\d+)匹配第二个负数或正数

代码可以是:

String[] ranges = {"1 - 10", "-1 - -10", "1-10", "-10-5"};
String regex = "(-?\\d+)\\s*-\\s*(-?\\d+)";
Pattern pattern = Pattern.compile(regex);

for (String range : ranges) {
    Matcher matcher = pattern.matcher(range);
    while (matcher.find()) {
        String number1 = matcher.group(1);
        String number2 = matcher.group(2);
        System.out.print(number1 + " " + number2);

    }
    System.out.println();
}

输出

1 10
-1 -10
1 10
-10 5

如果您的数字也可以带有正+号,则可以将正则表达式更改为

([+-]?\d+)\s*-\s*([+-]?\d+)

如果您的数字可以是小数,则可以使用此正则表达式:

([-+]?\d*\.?\d*)\s*-\s*([-+]?\d*\.?\d*)