基本的に、人に関する詳細を含むファイルを取得しました。各人は改行で区切られています。
name Marioka address 97 Garderners Road birthday 12-11-1982 \n
name Ada Lovelace gender woman\n
name James address 65 Watcher Avenue
" 等々..
そして、それらを[キーワード:値]ペア配列に解析したいと思います。
{[Name, Marioka], [Address, 97 Gardeners Road], [Birthday, 12-11-1982]},
{[Name, Ada Lovelace], [Gender, Woman]}, and so on....
等々。上記の場合、キーワードは一連の定義された単語になります: 名前、住所、誕生日、性別など...
これを行う最善の方法は何ですか?
これは私がやった方法ですが、うまくいきますが、より良い解決策があるかどうか疑問に思っていました.
private Map<String, String> readRecord(String record) {
Map<String, String> attributeValuePairs = new HashMap<String, String>();
Scanner scanner = new Scanner(record);
String attribute = "", value = "";
/*
* 1. Scan each word.
* 2. Find an attribute keyword and store it at "attribute".
* 3. Following words will be stored as "value" until the next keyword is found.
* 4. Return value-attribute pairs as HashMap
*/
while(scanner.hasNext()) {
String word = scanner.next();
if (this.isAttribute(word)) {
if (value.trim() != "") {
attributeValuePairs.put(attribute.trim(), value.trim());
value = "";
}
attribute = word;
} else {
value += word + " ";
}
}
if (value.trim() != "") attributeValuePairs.put(attribute, value);
scanner.close();
return attributeValuePairs;
}
private boolean isAttribute(String word) {
String[] attributes = {"name", "patientId",
"birthday", "phone", "email", "medicalHistory", "address"};
for (String attribute: attributes) {
if (word.equalsIgnoreCase(attribute)) return true;
}
return false;
}