2010-09-11 132 views
1

對於我的數據結構類,第一個項目需要解析歌曲的文本文件。解析文本 - 掃描儀或BufferedReader?

輸入的一個例子是:
ARTIST =「未知」
TITLE =「Rockabye寶貝」
歌詞=「Rockabye寶寶在樹梢
當風兒吹起你的搖籃搖
當弓傷了你的搖籃也就掉
下會嬰兒搖籃和所有

我想知道的藝術家,標題和歌詞提取歌曲中的類各自的字符串字段的最佳途徑。我的第一反應是使用掃描儀,取第一個字符,並根據字母使用skip()提前輸入所需字符並讀取引號之間的文本。

如果我使用這個,我會失去緩衝輸入。完整的歌曲文本文件有超過422K行文字。即使沒有緩衝,掃描儀是否可以處理這個問題?

回答

3

對於這樣的事情,你應該使用正則表達式。 Matcher類支持緩衝輸入。

find方法需要一個偏移量,所以你可以在每個偏移量處解析它們。

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

正則表達式是整個世界變成自己。如果你以前從未使用過它們,請從這裏開始http://download.oracle.com/javase/tutorial/essential/regex/並做好準備。努力是所以非常值得所需的時間。

+0

正則表達式是解決方案 – mhshams 2010-09-11 17:32:19

+0

我正在研究正則表達式,它看起來符合我的需求,事情是,這將是我第一次使用這個&它非常複雜,謝謝你的鏈接 – Jason 2010-09-11 20:16:35

+0

因爲這只是一個數據結構課程,輸入很簡單,所以正則表達式可能是過量的。 – MAK 2010-09-11 20:47:37

1

如果源數據可以使用一個令牌進行解析,那麼StreamTokenizer可能是一個選擇。這是一個example比較StreamTokenizerScanner

1

在這種情況下,您可以使用CSV reader,字段分隔符'='和字段分隔符'''(雙引號)。它不完美,因爲您爲ARTIST,TITLE和LYRICS獲取一行。

+0

這也會解決轉義字符的問題(LYRICS中的雙引號)。順便說一下,還有其他的CSV閱讀器工具,我只是鏈接了我所知道的(並且自己寫的)。 – 2010-09-12 06:29:59