0

我正在尝试将txt包含歌词和和弦的文件转换为ChordPro格式,反之亦然。所以是这样的:

G                   Em
I heard there was a secret chord

G                        Em
that David played and it pleased the Lord

会成为:

[G]I heard there was [Em] a secret chord

[G] that David played and [Em] it pleased the Lord

我目前正在使用一个NSDictionary键值(例如键 E 值 [E])并以此为基础从文件中转换字符串。我正在使用Replace multiple groups of characters in an NSString 中stringByReplacingStringsFromDictionary的自定义方法。

我现在只需要在转换实际上包含和弦(并且没有歌词)的行时才需要这样做。例如,我不想转换David[D]avid.

我认为最好的方法是检查该行是否包含任何未被识别为和弦的内容,如果是则跳过它。但是我怎样才能以这种方式测试一个NSStringNSDictionary或其他集合)?

4

2 回答 2

0

没有必要为此使用 NSDictionary。您可以使用包含和弦名称的 NSString 变量[NSString stringWithFormat:@"[%@]", chord]来创建字符串。chord

话虽如此,在这种情况下,字典很小并且没有任何害处,只是用我们可以从一个简单操作(在字符串周围添加括号)推断出的数据填充字典是没有用的。

于 2012-10-16T16:12:15.613 回答
0

所以它是由空格分隔的单词,如果任何一行不包含任何单词或一个未被识别为和弦的单词,那么它就会被单独留下,否则你将它们包裹在方括号中并将它们插入到它们的原始位置到下面的行中?

您将按单词进行搜索,因此我会将已知的和弦放入NSSet. 然后我会看看NSString's componentsSeparatedByCharactersInSet:。我会使用newlineCharacterSet来划分行,而不必痴迷于回车与换行。我会使用whitespaceCharacterSet来获取每行的单词列表。根据集合检查它们并完成决策逻辑。

然后,您可以使用对 的顺序调用,随时rangeOfString:options:range:修改第三个参数,以在丢弃所有空格之前恢复和弦的字符位置。

如果你不太可能编译出完整的和弦列表,那么一个聪明的方法可能是将任何你识别出超过 50% 的单词的行标记为和弦线或任何减少的和弦线当您删除空格时,长度按足够的比例。

于 2012-10-16T16:40:17.813 回答