我需要检查数百万个字符串的缩写,并用完整版本替换它们。由于数据原因,仅应替换以逗号结尾的缩写词。字符串可以包含多个缩写。
我有一个包含 Abbreviation->Fullversion 对的查找表,它包含大约 600 对。
我当前的设置看起来像这样。在启动时,我使用 Jackson 从一个 csv 文件创建一个 ShortForm 实例列表,并将它们保存在一个单例中:
public static class ShortForm{
public String fullword;
public String abbreviation;
}
List<ShortForm> shortForms = new ArrayList<ShortForm>();
//csv code ommited
还有一些使用列表的代码
for (ShortForm f: shortForms){
if (address.contains(f.abbreviation+","))
address = address.replace(f.abbreviation+",", f.fullword+",");
}
现在这可行,但速度很慢。有什么办法可以加快速度吗?第一步是加载带有逗号的 ShortForm 对象,但我还能做什么?
======更新 更改代码以相反的方式工作。将字符串拆分为单词并检查集合以查看字符串是否为缩写。
StringBuilder fullFormed = new StringBuilder();
for (String s: Splitter.on(" ").split(add)){
if (shortFormMap.containsKey(s))
fullFormed.append(shortFormMap.get(s));
else
fullFormed.append(s);
fullFormed.append(" ");
}
return fullFormed.toString().trim();
测试表明这比原始方法快 13 倍以上。干杯达夫康!