将包含数字范围的字符串拆分为" - "

Sak*_*ura 1 java regex string split

我想拆分一个由' - '组成的字符串,

例

String range = "1 - 10";
Run Code Online (Sandbox Code Playgroud)

我正在做这样的事情:

String[] s = range.split("-");
Run Code Online (Sandbox Code Playgroud)

因此s[0]将具有起始价值并s[1]具有最终价值.

但这不适用于负数.

例

String range = "-1 - -10";
Run Code Online (Sandbox Code Playgroud)

我该如何处理负范围?

YCF*_*F_L 8

我希望在这种情况下使用模式而不是拆分这样的正则表达式:

(-?\d+)\s*-\s*(-?\d+)
Run Code Online (Sandbox Code Playgroud)

巫婆的意思是:

  • (-?\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();
}
Run Code Online (Sandbox Code Playgroud)

输出

1 10
-1 -10
1 10
-10 5
Run Code Online (Sandbox Code Playgroud)

如果您的号码也可以有正+号,您可以更改您的正则表达式

([+-]?\d+)\s*-\s*([+-]?\d+)
Run Code Online (Sandbox Code Playgroud)

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

([-+]?\d*\.?\d*)\s*-\s*([-+]?\d*\.?\d*)
Run Code Online (Sandbox Code Playgroud)