2012-05-24 70 views
0

我正在寫一個程序,將採取樂譜(和絃歌詞上面)和轉置的關鍵。我選擇分割一首歌曲String,處理和絃名稱並構建一個新的String。我的方法是將歌曲拆分成行String[] holder = song.split("\\n+");然後,取每行並根據空白進行拆分String[] oneLine = s.split("\\s");重建字符串與字符串拆分Java

構建新字符串時,保持原始間距絕對至關重要。我的問題是,通過分裂/ /我失去了所有的間距歷史。任何人都可以提出解決我的問題?

下面是一個例子歌

String song = "G Em C D\nSome Lyrics Go Here\nG C D\nOther Lyrics Go Here"; 

目前我調換歌曲看起來像這樣...

AF#mDE 
Some Lyrics Go Here 
ADE 
Other Lyrics Go Here 
+0

你的意思是從'G Em C D'你想改變爲'A F#m D E'之前有空白嗎?但是因爲你試圖改變它而不是白色空間消失?當您嘗試更改密鑰時,您可以發佈代碼嗎? – Crazenezz

回答

1

如果使用StringTokenizer拆分字符串,則可以將其配置爲保留並返回分隔符。這樣,你可以保持空間的數量。

請參閱StringTokenizer(String,String,boolean)構造函數。

公共的StringTokenizer(字符串str, 字符串DELIM, 布爾returnDelims)

構造爲指定字符串字符串標記。 delim參數中的所有字符都是用於分隔令牌的分隔符。

如果returnDelims標誌爲true,那麼分隔符字符也會作爲標記返回。每個分隔符以長度爲1的字符串形式返回。如果該標誌爲假,則跳過分隔符字符,並且僅用作標記之間的分隔符。

請注意,如果delim爲空,則此構造函數不會引發異常。但是,試圖在生成的StringTokenizer上調用其他方法可能會導致NullPointerException。

參數:
str - 一個字符串被解析。
delim - 分隔符。
returnDelims - 指示是否將分隔符返回爲標記的標誌。

+0

我之前使用過tokenizer,但沒有意識到它有這個功能。我會給它一個鏡頭。謝謝! – MCR

0

而不是使用String.split()的,正如你已經注意到了,會捨棄你的間距,你需要使用其他技術。您可以簡單地在每個循環中逐行處理每行一個字符,並將每個字符作爲處理後的字符追加到StringBuilder,這樣您最後的字符數就會完全相同。