在我最近的项目中,我正在动态地构建句子,然后在通过文本进行语法上的“清理”之后。我要做的一个任务是将出现的“ a”切换为“ an”,其中下一个单词的第一个字母是元音。目前,我只关注小写英语单词,而忽略了以“ h”开头的单词。
我现有的解决方案现在可以使用,但是它看起来效率极低,并且如果将来我想支持国际化,肯定无法扩展。
if ([destination rangeOfString:@" a "].location != NSNotFound) {
destination = [destination stringByReplacingOccurrencesOfString:@" a a" withString:@" an a"];
destination = [destination stringByReplacingOccurrencesOfString:@" a e" withString:@" an e"];
destination = [destination stringByReplacingOccurrencesOfString:@" a i" withString:@" an i"];
destination = [destination stringByReplacingOccurrencesOfString:@" a o" withString:@" an o"];
destination = [destination stringByReplacingOccurrencesOfString:@" a u" withString:@" an u"];
}
我先检查“ a”情况,只是为了避免所有后续替换行的无效性。我认为必须有一种更流畅,更有效的方式(也许使用正则表达式)来做到这一点?
根据您建议的正则表达式,NSRegularExpression
这是一个可能有用的基础工具。
这里是一个例子:
NSRegularExpression
[一些小注释:
NSString* source = @"What is a apple doing in a toilet? A umbrella is in there too!";
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"\\b([Aa])( [aeiou])"
options:0
error:nil];
NSString* result = [regex
stringByReplacingMatchesInString:source
options:0
range:NSMakeRange(0, [source length])
withTemplate:@"$1n$2"];
和options:0
条目只是我在可能在实际用例中有用的选项上打了个比方。error:nil
),以捕捉我想像的在标点符号之后出现的棘手的“ a”(例如“下雨了; appeared出现了。”)。 [编辑:哎呀,我错了,那是我在想一个“ A” 开始一个句子的地方。]希望有帮助!