【发布时间】:2011-01-25 21:14:23
【问题描述】:
我希望能够解析如下字符串:“123456abcd9876az45678”。 BNF是这样的:
number: ? definition of an int ?
word: letter { , letter }
expression: number { , word , number }
但是 java.util.scanner 类不允许我执行以下操作:
Scanner s = new Scanner("-123456abcd9876az45678");
System.out.println(s.nextInt());
while (s.hasNext("[a-z]+")) {
System.out.println(s.next("[a-z]+"));
System.out.println(s.nextInt());
}
理想情况下,这应该产生:
-123456
abcd
987
az
45678
我真的希望 java.util.Scanner 能帮助我,但看起来我必须创建自己的扫描仪。 Java API 中是否已经存在任何可以帮助我的东西?
这个问题错过了太多信息。因此,所有答案都对问题有效,但对我的问题无效。
【问题讨论】:
-
我不知道这段代码应该做什么,但我想你应该有 [a-z]* 而不是 [a-z]
-
好的,完整的常见情况是以下“4d8 - 1d4+20”被解析为两个骰子掷骰 + 一个常数。可能有更多的骰子,可能没有,可能有空格或没有空格。底线是我想在没有任何分隔符的情况下即时更改标记。我也不想被重定向到 SO 中通常的骰子符号线程,因为它对他们都在使用的所有这些 eval 函数没有帮助。我想构建骰子表达式的树。