AIR
 

MapのKeyを部分一致検索し、valueを取り出す

概要

Mapで作成したKeyの文字列に対して、部分一致で検索します。
高速化用に、MapのKetに文字列が含まれていない場合に部分一致で検索します。

週間天気予報の都道府県の名前を部分一致で入力しても良いように作れます。

メモ

部分検索に特化しているため、
より曖昧検索を可能とする場合(千代田区の入力から東京都を出力など)、
事前に意味解析を行った上で、複数回検索を行う方法に切り替えた方が良い。

ソースコード


  1. public class GetJMA {
  2. private Map<String, String> arealist = null;
  3. //TODO: あらかじめarealistにはarealist.put("東京都", "319.html")のようにデータを入れておく。
  4.  
  5. public boolean executeGetJMAweeklyWeather() {
  6.  
  7. String area = this.search("東京",arealist);
  8. if (area != null) {
  9. System.out.println("=== " + area + " ===");
  10.  
  11. }else{
  12. System.out.println("=== 検索失敗 ===");
  13. return false;
  14. }
  15. }
  16.  
  17.  
  18. public String search(String inputData, Map<String, String> targetData) {
  19.  
  20. String outputData = null;
  21.  
  22. if (targetData.containsKey(inputData)) {
  23. // Keyに含まれる場合の出力
  24. outputData = targetData.get(inputData);
  25. } else {
  26. // Keyに含まれない場合の曖昧検索(部分一致検索)
  27.  
  28. // Mapから全てのキーをSet型で取得する
  29. Set<String> targetDataSet = targetData.keySet();
  30. Iterator<String> it = targetDataSet.iterator();
  31. while (it.hasNext()) {
  32. // 検索対象の文字列を取得
  33. String targetDataIt = it.next();
  34. if (targetDataIt.matches(".*" + inputData + ".*")) {
  35. // 部分一致です
  36. outputData = targetData.get(targetDataIt);
  37. System.out.println("=== " + targetDataIt + " ===");
  38. } else {
  39. // 部分一致ではありません
  40. }
  41. }
  42. }
  43. return outputData;
  44. }
  45. }
  46.  
  47.  

実行結果


=== 319.html ===


更新日時:2014-06-08
タグ:

最終更新:2014年06月08日 12:03