Отметьте следующий символ для специальности

Я пишу небольшой код, который считывает ввод из текстового файла и распечатывает токены и их метки. Однако я столкнулся с проблемой. Если код читается буквами, в идеале он должен проверять следующий символ, чтобы узнать, является ли это другой буквой или специальным символом, например:

abcde=123;

Как мне сказать программе, чтобы она смотрела вперед и проверяла, является ли следующий символ другой буквой, равно, числом и т. Д. Теперь, есть ли способ в этом операторе if сказать «если следующий символ не является буквой, print» = TEXT \ n ", иначе продолжить '?

Если этот вопрос смущает, мне очень жаль (я здесь), и я предложу дополнительную информацию. Спасибо.


person Chris Marker    schedule 02.11.2011    source источник


Ответы (4)


Вы можете проверить, является ли следующий символ НЕ цифрой. Ознакомьтесь с Character API. У него есть метод isDigit (). По сути, если следующий символ НЕ является цифрой, то это либо специальный символ, либо пробел, либо буква.

Надеюсь, это вам немного поможет!

person Mechkov    schedule 02.11.2011

Сначала я отвечу на ваш вопрос, а затем предложу то, что, по моему мнению, является лучшим способом выполнить то, что вы делаете.

Если вы оберните свой Reader в BufferedReader, вы можете отметить точку, в которой вы находитесь, получить следующий символ и сбросить, чтобы вернуться к предыдущему символу, чтобы на следующей итерации вы снова прочитали этот символ:

BufferedReader br = new BufferedReader(reader);
br.mark(1);
int firstByte = br.read();
br.reset();

Другой способ добиться этого и избежать ожидания - добавить каждый символ в StringBuilder. Затем, когда вам нужен весь номер из-за того, что вы нажали не цифру, у вас есть весь номер в StringBuilder. Если вы повторно используете тот же StringBuilder и просто очищаете его, когда это необходимо, это должно быть эффективным.

person Sarel Botha    schedule 02.11.2011

В дополнение к другим ответам Java также имеет PushbackInputStream класс. Иногда это как раз то, что нужно для решения проблем с опережением.

person President James K. Polk    schedule 02.11.2011

Все очень просто, используя метод Character.isLetter(character). Этот метод вернет true, если аргумент представляет собой букву, и false, если это не так.

ссылка на документацию на _4 _

person Charles Sprayberry    schedule 02.11.2011
comment
Если вы предполагаете только ASCII, вам нужна только проверка if (я был бы несколько удивлен, обнаружив несимволы в диапазоне 97–122), но тогда зачем вам предполагать такое? Символьные методы НАМНОГО лучше подходят для этих целей. - person Voo; 03.11.2011
comment
Воо, я использовал метод Character.isLetter() для проверки письма. Весь этот код без проверки Character.isLetter() был предоставлен OP. - person Charles Sprayberry; 03.11.2011
comment
Voo, заметил вопрос, отредактированный OP, поэтому я отредактировал свой ответ, чтобы удалить пример кода, поскольку он может сбивать с толку людей, которые не видели код OP. - person Charles Sprayberry; 03.11.2011