この問題は正規表現で解決しました。
サンプルコード:
ArrayList<String> keys = new ArrayList<String>();
keys.add("username");
keys.add("on");
String startDelimiter = ":";
String endDelimiter = ":";
String searchStr = "A user with username :suren: logged into the system on :22 May 2013 2:30 PM:";
for (String key : keys) {
String pattern = "("+key+")[ ]*?"+startDelimiter+"([^" +endDelimiter+ "]+)"+endDelimiter;
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(searchStr);
while (m.find()) {
System.out.println("Key: " + m.group(1) + " Value: "
+ m.group(2));
}
}
テスト
I. キー: ユーザー名 開始区切り文字: ; 終了区切り文字: ;
キー (この場合はユーザー名) が続き、値が開始区切り文字と終了区切り文字 (この場合は ;) の間にある値を見つける必要があります。
Ⅱ.キー: 開始区切り文字: ; 終了区切り文字: ;
サンプル入力:
ユーザー名が ;suren; のユーザー 2013 年 5 月 2 日木曜日の午後 2 時 30 分にシステムにログインしました。
結果: I. ユーザー名 - スレン II. 2013 年 5 月 2 日(木)午後 2 時 30 分