使用字符串拆分 Java 重建字符串



我正在编写一个程序,它将采用乐谱(歌词上方的和弦)并转置键。 我选择拆分一首歌曲字符串,操作和弦名称并构建一个新的字符串。 我的方法是将歌曲分成几行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,这样您最终会在末尾获得相同数量的字符。

最新更新