Как мне обойти TT_NUMBER от StreamTokenizer - PullRequest
1 голос
/ 14 января 2012

Я заменил вызов String.split () на цикл с помощью StreamTokenizer, потому что моим пользователям требовалась функция цитирования.Но сейчас у меня проблемы с преобразованием чисел в числа, а не в виде строк.В моем цикле, если я получу TT_NUMBER, я преобразую его обратно в строку с помощью Double.toString ().Но это не работает для некоторых длинных серийных номеров, которые должны быть отправлены мне;они преобразуются в экспоненциальную запись.

Я могу изменить способ преобразования чисел обратно в строки, но я действительно хотел бы просто не анализировать числа в первую очередь.Я вижу, что StreamTokenizer имеет метод parseNumbers (), который включает разбор чисел, но, похоже, нет способа его отключить.Что мне нужно сделать, чтобы создать и настроить синтаксический анализатор, идентичный стандартному, но не анализирующий числа?

1 Ответ

4 голосов
/ 14 января 2012

Вы можете сбросить определения токенов из StreamTokenizer, вызвав resetSyntax(), а затем переопределив символы слова, включив в них также цифры.

Следующее:

Reader r = new BufferedReader(new StringReader("123 foo \"string \\\" literal\" 0.5"));

StreamTokenizer st = new StreamTokenizer(r);

st.resetSyntax();
st.wordChars(0x23, 0xFF);
st.whitespaceChars(0x00, 0x20);
st.quoteChar('"');

while(st.nextToken() != StreamTokenizer.TT_EOF) {
  System.out.println(st.sval);
}

будетпечать:

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