2012-05-24 28 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,这样您最后的字符数就会完全相同。