Как я могу убедиться в наличии пробела между конкретными токенами с StreamTokenizer? - PullRequest
0 голосов
/ 30 марта 2011

Я работаю с StreamTokenizer для разбора текста, и мне нужно убедиться, что между определенными токенами есть пробел.Например, « 5 + 5 » недопустимо, но « 5 + 5 » допустимо.

Я действительно не знаю StreamTokenizer так хорошо;Я прочитал API, но не смог найти ничего, чтобы помочь мне.Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Вам нужно будет установить пробелы как "обычные символы".Это означает, что они будут возвращены в качестве токенов самостоятельно, но не свернуты в другие токены.Пример:

StreamTokenizer st = new StreamTokenizer(new StringReader("5 + 5"));
st.ordinaryChar(32);
int tt = st.nextToken();  // tt = TT_NUMBER, st.nval = 5
tt = st.nextToken();      // tt = 32 (' ')
tt = st.nextToken();      // tt = 43 ('+')
tt = st.nextToken();      // tt = 32 (' ')
tt = st.nextToken();      // tt = TT_NUMBER, st.nval = 5
tt = st.nextToken();      // tt = TT_EOF

К сожалению, вам придется иметь дело с пробелами в вашем парсере.Я бы порекомендовал прокатить свой собственный токенизатор.Если вы не делаете что-то быстрое и грязное, StreamTokenizer почти всегда является неправильным выбором.

0 голосов
/ 30 марта 2011

Попробуйте использовать Scanner вместо этого. E.g.:

String input = "5 + 5";
Scanner scanner = new Scanner(input).useDelimiter(" ");
int num1 = scanner.nextInt();
String op = scanner.next();
int num2 = scanner.nextInt();

Это упрощенный пример, который предполагает ввод, такой как "5+5" или "5 + 5". Вы должны проверять scanner.hasNext() на ходу, возможно, в цикле where для обработки более сложных входных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...