Каков наилучший способ, чтобы stringTokenizer разделял строку текста на предопределенные переменные

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

line[1] = isbn;
line[2] = title;
Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top