何百万もの文字列の略語を調べて、完全版に置き換える必要があります。データのため、コンマで終わる略語のみを置き換える必要があります。文字列には複数の略語を含めることができます。
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 倍以上高速であることが示されています。乾杯デイブコム!