Каков наилучший способ, чтобы stringTokenizer разделял строку текста на предопределенные переменные - PullRequest
2 голосов
/ 25 октября 2008

Я не уверен, что заголовок очень четкий, но в основном я должен прочитать строку текста из файла и разделить его на 8 различных строковых переменных. Каждая строка будет иметь одинаковые 8 блоков в том же порядке (заголовок, автор, цена и т. Д.). Поэтому для каждой строки текста я хочу получить 8 строк.

Первая проблема заключается в том, что последние два поля в строке могут присутствовать или не присутствовать, поэтому мне нужно что-то сделать с stringTokenizer.hasMoreTokens, иначе он будет беспорядочно умирать, когда поля 7 и 8 отсутствуют.

В идеале я хотел бы сделать это за один цикл for, но я не уверен, как сказать этому циклу, каким будет порядок полей, чтобы он мог правильно заполнить все 8 (или 6) строк. , Скажите, пожалуйста, есть лучший способ использовать 8 вложенных операторов if!

РЕДАКТИРОВАТЬ: решение String.split, безусловно, является его частью, поэтому я буду использовать его вместо stringTokenizer. Тем не менее, я до сих пор не уверен, что лучший способ подачи отдельных строк в конструктор. Будет ли лучший способ получить класс, ожидающий массив, а затем просто сделать что-то подобное в конструкторе:

line[1] = isbn;
line[2] = title;

Ответы [ 4 ]

3 голосов
/ 25 октября 2008

Лучший способ - вообще не использовать StringTokenizer, а использовать метод String split . Он возвращает массив строк, и вы можете получить длину из этого.

Для каждой строки в вашем файле вы можете сделать следующее:

String[] tokens = line.split("#");

tokens теперь будет иметь 6 - 8 строк. Используйте tokens.length(), чтобы узнать, сколько, а затем создайте свой объект из массива.

2 голосов
/ 25 октября 2008

Регулярное выражение это путь. Вы можете преобразовать входящую строку в массив строк, используя метод split

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)

1 голос
/ 25 октября 2008

Подойдет ли вам регулярное выражение с группами захвата? Вы, конечно, можете сделать части выражения необязательными.

Пример строки данных или три могут быть полезны.

0 голосов
/ 25 октября 2008

Является ли это CSV или подобным файлом случайно? Если да, то вам помогут библиотеки, например, Apache Commons CSV (ссылки на альтернативы на их странице тоже). Вы получите строку [] для каждой строки в файле. Просто проверьте размер массива, чтобы узнать, какие дополнительные поля присутствуют.

...