Каков наилучший способ, чтобы stringTokenizer разделял строку текста на предопределенные переменные
Вопрос
Я не уверен, что заголовок очень четкий, но в основном я должен прочитать строку текста из файла и разделить его на 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 (ссылка на альтернативы) на их странице тоже). Вы получите строку [] для каждой строки в файле. Просто проверьте размер массива, чтобы узнать, какие дополнительные поля присутствуют.