我的输入类似于"Hi {{username}}"
,即一个带有关键字的字符串,但是,输入相当小(大约10个关键字和1000个字符),而且我有一百万个可能的关键字存储在一个哈希表数据结构中,每个关键字都与它的替换相关联。
因此,出于明显的性能原因,我不想迭代关键字列表并尝试替换输入中的每个关键字,我更喜欢通过查找正则表达式模式"\{\{.+?\}\}"
来只迭代一次输入字符。
在Java中,我使用Matcher.appendReplacement
和Matcher.appendTail
方法来实现这一点,但是我找不到与NSRegularExpression
类似的API。
private String replaceKeywords(String input)
{
Matcher m = Pattern.compile("\\{\\{(.+?)\\}\\}").matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find())
{
String replacement = getReplacement(m.group(1));
m.appendReplacement(sb, replacement);
}
m.appendTail(sb);
return sb.toString();
}
我是被迫自己实现这样的API,还是我错过了什么?
2条答案
按热度按时间dphi5xsq1#
您可以使用
NSRegularExpression
来实现这一点:使用Swift 5.7中引入的
Regex
类型的Swift版本需要macOS 13或iOS 16以上版本):cbeh67ev2#
我不相信你能直接做你想做的事。
您可以考虑使用RegexKit Lite,特别是
stringByReplacingOccurrencesOfRegex:usingBlock:
方法,其中替换块保存来自上面while
循环的逻辑,以查找并返回适当的替换。