2010-09-11 3 views
1

Для моего класса структур данных первый проект требует текстового файла с песнями для анализа.Анализ текста - сканера или буферизатора?

Пример ввода является:
ИСПОЛНИТЕЛЯ = «неизвестно»
TITLE = «Rockabye младенца»
LYRICS = "Rockabye ребенка в верхушках деревьев
Когда ветер дует ваш Колыбель будет качаться
Когда лук ломает ваша колыбель упадет
вниз придет ребенок люльки и все
"

Я интересно, что лучший способ извлечь исполнитель, название и тексты песен их соответствующих строковых полей в классе Song. Моя первая реакция заключалась в том, чтобы использовать сканер, взять первый символ и на основе буквы использовать skip() для продвижения необходимых символов и чтения текста между кавычками.

Если я использую это, я теряю при буферизации ввода. Полный текстовый файл песни имеет более 422 тыс. Строк текста. Может ли сканер справиться с этим даже без буферизации?

ответ

3

Для чего-то вроде этого, вероятно, вы должны просто использовать регулярные выражения. Класс Matcher поддерживает буферизованный вход.

Метод поиска принимает смещение, поэтому вы можете просто анализировать их при каждом смещении.

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html

Regex целый мир в себе. Если вы никогда не использовали их раньше, начинайте здесь http://download.oracle.com/javase/tutorial/essential/regex/ и будьте готовы. Усилия так очень стоит времени.

+0

Регулярное выражение - это решение. – mhshams

+0

Я тоже искал регулярное выражение, и это похоже на мои потребности. Дело в том, что это был мой первый раз, когда это было довольно сложно. Спасибо за ссылки. – Jason

+0

Так как это просто для курса структуры данных, и ввод довольно прост, регулярное выражение, вероятно, слишком велико. – MAK

1

Если исходные данные могут быть проанализированы с использованием одного токена, то можно выбрать StreamTokenizer. Вот example, который сравнивает StreamTokenizer и Scanner.

1

В этом случае вы можете использовать CSV reader с разделителем полей '=' и разделителем полей '' '(двойная кавычка). Это не идеально, поскольку вы получаете одну строку для ARTIST, TITLE и LYRICS.

+0

Это также решать проблемы с escape-символами (двойные кавычки в LYRICS. К сожалению, есть другие инструменты чтения CSV, я просто связал тот, который я знаю (и написал сам). –

Смежные вопросы