如何在java中解析范围输入

如何在java中解析范围输入,java,Java,我想用Java解析一系列数据(例如100-2000)。此代码是否正确: String patternStr = "^(\\\\d+)-(\\\\d+)$"; Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(inputStr); if(matcher.find()){ // Doing some parser } 不,你是在逃避数字

我想用Java解析一系列数据(例如100-2000)。此代码是否正确:

    String patternStr = "^(\\\\d+)-(\\\\d+)$";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(inputStr);
    if(matcher.find()){
     // Doing some parser
    }
不,你是在逃避数字

它应该是:
“^(\\d+)-(\\d+)$”

意思是:

  • 输入开始:
    ^
  • 第1组:1个以上数字:
    (\\d+)
  • 连字符文字:
    -
  • 第2组:1个以上数字:
    (\\d+)
  • 输入结束:
    $
注释

这些组对于反向引用很有用。这里您使用的是none,因此可以去掉
\\d+
表达式周围的括号

在本例中,您正在解析范围的表示形式

如果需要实际的范围类,可以使用
[minmax]
习惯用法,其中“min”和“max”是数字,例如
[0-9]


正如Andreas所提到的,如果要匹配整个输入,可以使用
String.matches
,而不使用
模式
-
Matcher
习惯用法和
^
$

反斜杠太多,您可以使用
matches()
而不使用锚(^$)

至于你的问题“这段代码正确吗”,你所要做的就是用
main
方法将代码包装在一个类中并运行它,你会得到答案:No

问题是如何“解析”,而不是如何验证,所以如果你“去掉括号”,如何提取范围的
min
max
值问题是关于“数据范围(例如100-2000)”,那么这与正则表达式字符类范围有什么关系呢?
String inputStr = "100-2000";
String patternStr = "(\\d+)-(\\d+)";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
    System.out.println(matcher.group(1) + " - " + matcher.group(2));
}