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()编写一些解析逻辑可能更容易?