带有自定义分隔符的扫描仪可以解析双打和字符串?

时间:2016-07-03 02:59:52

标签: java

给定字符串1.5 + 2,我想解析并处理Double,operator和Integer。

下面的代码与不包含小数的字符串一样正常工作,但对于打印的给定输入:

1 . 5 + 2

虽然我想要打印:

1.5 + 2

使用带有自定义正则表达式的Scanner类是否可以实现?

String delimiter = "(?:\\s+)|(?<=[+)|(?=[+])";

Scanner scanner = new Scanner("1.5 + 2");
scanner.useDelimiter(delimiter);

while (scanner.hasNext()) {
  String token = scanner.next();
  System.out.println(token);
}

2 个答案:

答案 0 :(得分:0)

* 窃取intboolstring's comment获取想法*嗯,为什么不从空格中删除输入?

String delimiter = "\\s+";

说明:上面的字符串是正则表达式\s+,它匹配一个或多个空格/制表符/换行符。

答案 1 :(得分:0)

不是为分割的位置编写模式(对于split()Scanner),而是为您想要保留的内容编写模式可能更容易。

示例:

Pattern exprPattern = Pattern.compile("\\d+(?:\\.\\d+)?" +     // digits [ '.' digits ]
                                     "|\\.\\d+" +              // '.' digits
                                     "|[a-zA-Z][a-zA-Z0-9]*" + // identifier
                                     "|\\S");                  // any single non-whitespace
String expr = "1.5 + 7.2*(var3 - .1)";
for (Matcher m = exprPattern.matcher(expr); m.find(); )
    System.out.println(m.group());

输出

1.5
+
7.2
*
(
var3
-
.1
)