我正在编写一个程序,它将采用乐谱(歌词上方的和弦)并转置键。 我选择拆分一首歌曲字符串,操作和弦名称并构建一个新的字符串。 我的方法是将歌曲分成几行String[] holder = song.split("\n+");
然后,取每行并根据空格String[] oneLine = s.split("\s");
拆分
在构建新字符串时,保持原始间距绝对至关重要。 我的问题是,通过在//s 上拆分,我丢失了所有间距的历史。 任何人都可以为我的问题提出解决方案吗?
这是一首示例歌曲
String song = "G Em C DnSome Lyrics Go HerenG C DnOther Lyrics Go Here";
目前我的转调歌曲看起来像这样...
AF#mDE
Some Lyrics Go Here
ADE
Other Lyrics Go Here
如果使用StringTokenizer
来拆分字符串,则可以将其配置为保留并返回分隔符。 这样,您可以保持空格数。
请参阅构造StringTokenizer(String,String,boolean)
。
public StringTokenizer(String str, 弦德利姆, 布尔返回Delims)
为指定的字符串构造字符串分词器。
delim
参数中的所有字符都是用于分隔标记的分隔符。如果
returnDelims
标志为 true,则分隔符字符也会作为标记返回。每个分隔符都以长度为 1 的字符串返回。如果标志为 false,则跳过分隔符字符,仅用作标记之间的分隔符。请注意,如果
delim
为 null,则此构造函数不会引发异常。但是,尝试在生成的 StringTokenizer 上调用其他方法可能会导致 NullPointerException。参数:
str
- 要分析的字符串。
delim
- 分隔符。
returnDelims
- 指示是否将分隔符作为标记返回的标志。
而不是使用String.split()
,正如你所注意到的,它会丢弃你的间距,你需要使用一些其他技术。您可以简单地在循环中一次处理一行字符,将每个字符附加到StringBuilder
,这样您最终会在末尾获得相同数量的字符。