Я хотел бы иметь возможность анализировать строки, такие как: «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, чтобы помочь мне?
Вопрос пропустить слишком много информации. И поэтому все ответы действительны для вопроса, но не для моей проблемы.
Я не знаю, что этот код должен делать, но я думаю, вы должны иметь [аз] * вместо [аз] –
хорошо, полный общий случай является следующим «4d8 - 1d4 + 20» для анализа в виде двух бросков кубика + константа. Там может быть больше рулонов кости, их может не быть, могут быть пробелы или нет. В нижней строке я хотел бы изменить маркеры «на лету» без каких-либо разделителей. Я также не хочу, чтобы меня перенаправляли на обычный поток нот записи в SO, потому что это не помогает мне со всеми этими функциями eval, которые они все используют. Я хочу построить дерево выражения костей. –