Java 带自定义分隔符的扫描程序,用于分析双精度和字符串?
给定字符串Java 带自定义分隔符的扫描程序,用于分析双精度和字符串?,java,Java,给定字符串1.5+2,我想解析并处理Double、运算符和整数 对于不包含小数的字符串,但对于它打印的给定输入,下面的代码按预期工作: 1 . 5. + 2. 虽然我想把它打印出来: 1.5 + 2 这是否可以将Scanner类与自定义正则表达式一起使用 String delimiter = "(?:\\s+)|(?<=[+)|(?=[+])"; Scanner scanner = new Scanner("1.5 + 2"); scanner.useDelimiter(delimit
1.5+2
,我想解析并处理Double、运算符和整数
对于不包含小数的字符串,但对于它打印的给定输入,下面的代码按预期工作:
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);
}
String delimiter=“(?:\\s+)|(?*窃取从*获取想法好吧,为什么不从空白处剪切输入
String delimiter = "\\s+";
说明:上面的字符串是与一个或多个空格/制表符/换行符匹配的regex\s+
。与其为拆分位置(对于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.
)
有什么原因不使用空格作为分隔符吗?是的,我应该指定。如果输入为“1.5+2”“它仍然应该打印1.5,+,2。我认为你应该设计自己的来处理空白。@ab11你还在这里寻找更好的答案吗?不。放弃了,写了我自己的parserI应该指定的,它应该解析而不考虑空白。如果输入是“1.5+2”它仍然应该打印1.5、+、2.0,这是有意义的。不过,在这一点上,我认为用String.charAt()编写一些解析逻辑可能更容易?