Saturday, June 19, 2010

幽靈程式

我還在開發的mp3播放程式,昨天去請老師幫忙找bug,遇到了一段相當奇怪的狀況

我要將歌詞從txt檔,用BufferedReader.readLine()將資料放進hashMap裡,
我使用String.indexof("a")==1做判斷式,如果第1位是a,那我就不要將這一行放入hashMap。

這個動態歌詞的txt檔一部份是這樣的
[ti:煙花易冷]
[ar:周杰倫]
[al:跨時代]
[by:253057646] 
[00:11.62]繁華聲 遁入空門 折煞了世人
[00:17.59]夢偏冷 輾轉一生 情債又幾本

我的目的只要將"[00:11.62]繁華聲 遁入空門 折煞了世人"這類型的完整歌詞放進hashMap,
怎麼說"a"都應該在第1位元吧,
但怪異的是Eclipse一直跳出判斷式,
可是相同的程式碼在Netbeans去執行卻沒問題。

老師幫我抓出String.indexof("a")的位置居然是==2,
[ar:周杰倫]的"[a"前面,居然隱藏了一個空字元!

更怪的來了,當我真的將[a改成==2後,進入判斷式,判斷式裡面使用一個switch去抓出每行歌詞的資料,
我一樣用String.indexof("[")
但是這時候"["又變成==0!

在一旁跟我一起開發mp3的同學,稱此所謂幽靈程式。

老兄,七月還沒到哩!

2 comments:

Gpc said...
This comment has been removed by a blog administrator.
Gpc said...

一開始從StreamBuffer裡面讀出的byte[]被轉成Unicode文字就出問題了.

主要是Windows裡面對UTF8的支援相當怪異,會在檔頭亂加東西.