Жавовая режима и сопоставление рисунков: поиск «пробелов» в шаблоне, которые не включают их?JAVA

Программисты JAVA общаются здесь
Anonymous
Жавовая режима и сопоставление рисунков: поиск «пробелов» в шаблоне, которые не включают их?

Сообщение Anonymous »

Итак, мне нужно написать сканер компилятора для домашней работы, и подумал, что было бы «элегантно» использовать Regex. Факт в том, что я редко использовал их раньше, и это было давно. Поэтому я забыл большинство вещей о них, и мне нужно было осмотреться. Я успешно использовал их для идентификаторов (или, по крайней мере, я так думаю, мне все еще нужно сделать некоторые дополнительные тесты, но сейчас все они выглядят нормально), но у меня есть проблема с признанием чисел. Что я хотел бы сделать здесь, так это проверить, соответствует ли эта Charx regex [0-9]*. Я добавляю каждый соответствующий char в поле STR моего текущего токена, затем прочитал значение INT этого поля. Он распознает единый ввод, такой как «123», но проблема, с которой я столкнулся, заключается в том, что для ввода «123 456» конечный STR будет «123 456», в то время как я должен получить 2 отдельных токена с полями «123» и «456». Почему «» соответствует? < /P>

private void readNumber(Token t) {
t.str = "" + ch; // force conversion char --> String
final Pattern pattern = Pattern.compile("[0-9]*");
nextCh(); // get next char and check if it is a digit
Matcher match = pattern.matcher("" + ch);
while (match.find() && ch != EOF) {
t.str += ch;
nextCh();
match = pattern.matcher("" + ch);
}
t.kind = Kind.number;
try {
int value = Integer.parseInt(t.str);
t.val = value;
} catch(NumberFormatException e) {
error(t, Message.BIG_NUM, t.str);
}
< /code>

Спасибо! < /p>

ps: я решил свою проблему, используя код ниже. Тем не менее, я хотел бы понять, где недостаток в моем выражении режима. < /P>

t.str = "" + ch;
nextCh(); // get next char and check if it is a number
while (ch>='0' && ch

Редактировать: < /strong> Оказывается, что мое резервное выражение также не работает для распознавания идентификаторов (опять же, включает пробелы), поэтому мне пришлось переключиться на систему, аналогичную моему «решению» (в то время как с большими условиями). Думаю, мне нужно еще раз изучить регуляцию: o

Подробнее здесь: https://stackoverflow.com/questions/128 ... not-includ

Вернуться в «JAVA»