0

我正在编写一个程序,它将采用活页乐谱(歌词上方的和弦)并移调键。我选择拆分歌曲字符串,操作和弦名称并构建一个新字符串。我的方法是将歌曲分成几行String[] holder = song.split("\\n+"); 然后,取每一行并根据空格分割String[] oneLine = s.split("\\s");

在构建新字符串时,保持原始间距绝对至关重要。我的问题是,通过拆分 //s 我失去了所有间距的历史。谁能建议我的问题的解决方案?

这是一首示例歌曲

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
4

2 回答 2

1

如果您使用 aStringTokenizer来拆分字符串,则可以将其配置为保留并返回分隔符。这样,您可以保持空格数。

请参阅StringTokenizer(String,String,boolean)构造函数。

公共 StringTokenizer(String str, String delim, boolean returnDelims)

为指定的字符串构造一个字符串标记器。参数中的所有字符delim都是分隔标记的分隔符。

如果returnDelims标志为真,则分隔符也作为标记返回。每个分隔符都作为长度为 1 的字符串返回。如果标志为假,则跳过分隔符,仅用作标记之间的分隔符。

请注意,如果delim为 null,则此构造函数不会引发异常。但是,尝试在生成的 StringTokenizer 上调用其他方法可能会导致 NullPointerException。

参数:
str - 要解析的字符串。
delim- 分隔符。
returnDelims- 指示是否将分隔符作为标记返回的标志。

于 2012-05-24T03:15:44.400 回答
0

正如您已经注意到的那样,您不需要使用String.split()which 会丢弃您的间距,而是需要使用其他一些技术。您可以简单地在循环中一次处理一个字符,将处理后的每个字符附加到 a StringBuilder,这样您最终会得到相同数量的字符。

于 2012-05-24T03:13:12.983 回答