我正在写一个程序,将采取乐谱(和弦以上的歌词)和转置的关键。我选择拆分一个歌曲字符串,操作和弦名称,并建立一个新的字符串。我的方法是将歌曲拆分成几行,然后根据空格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发布于 2012-05-24 11:15:44
如果使用StringTokenizer拆分字符串,则可以将其配置为保留并返回分隔符。这样,您就可以保持空格的数量。
请参见StringTokenizer(String,String,boolean)构造函数。
公共StringTokenizer(String str,String delim,boolean returnDelims)
为指定字符串构造字符串标记器。delim参数中的所有字符都是分隔标记的分隔符。
如果returnDelims标志为true,则分隔符字符也将作为标记返回。每个分隔符都作为长度为1的字符串返回。如果该标志为false,则跳过分隔符字符,并且仅用作标记之间的分隔符。
请注意,如果delim为null,则此构造函数不会引发异常。但是,尝试在生成的StringTokenizer上调用其他方法可能会导致NullPointerException。
参数:
str -要解析的字符串。
delim -分隔符。
returnDelims -指示是否将分隔符作为标记返回的标志。
发布于 2012-05-24 11:13:13
正如您已经注意到的,不要使用String.split(),因为它将丢弃您的空格,您需要使用一些其他技术。您可以简单地在循环中一次一个字符地处理每一行,在处理每个字符时将其附加到一个StringBuilder,这样最终得到的字符总数是相同的。
https://stackoverflow.com/questions/10730632
复制相似问题