我希望能夠解析如下的字符串:「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中是否有任何東西可以幫助我?
這個問題想念太多的信息。因此,所有的答案都是有效的問題,但不是我的問題。
我不知道這是什麼代碼是應該做的,但我想你應該有[AZ],而不是* [AZ] – 2011-01-25 21:17:09
好吧,完整常見的情況是下面的「4D8 - 1D4 + 20」被解析爲兩個骰子+常量。可能會有更多的骰子滾動,可能沒有,可能有空格或沒有空格。底線是我想在沒有任何分隔符的情況下即時更換標記。我也不想被重定向到SO裏的通常的Dice符號線程,因爲它不能幫助我使用所有這些eval函數。我想建立骰子表達式的樹。 – 2011-01-25 21:44:36