给定字符串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);
}
答案 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
)