key/value
人とカウントのようなフォームペアの文字列を持つファイルがあります。例は次のようになります。
"Reggy, 15"
"Jenny, 20"
"Reggy, 4"
"Jenny, 5"
出力では、キーに基づいてすべてのカウント値を合計する必要があるため、この例の出力は次のようになります。
「レギー、19」「ジェニー、25」
これが私のアプローチです:
- 各行を読み取り、各行について、スキャナーを使用し
,
て区切り文字としてキーとカウントを取得します - ここで、キーがすでに存在するかどうかを確認します。存在しない場合は、currentValuesをpreviousValuesに追加し、存在しない場合は、currentValueをHashMapの値として取得します。
実装例:
public static void main(final String[] argv) {
final File file = new File("C:\\Users\\rachel\\Desktop\\keyCount.txt");
try {
final Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
if (scanner.hasNext(".*,")) {
String key;
final String value;
key = scanner.next(".*,").trim();
if (!(scanner.hasNext())) {
// pick a better exception to throw
throw new Error("Missing value for key: " + key);
}
key = key.substring(0, key.length() - 1);
value = scanner.next();
System.out.println("key = " + key + " value = " + value);
}
}
} catch (final FileNotFoundException ex) {
ex.printStackTrace();
}
}
よくわからないのは、キーと値のペアを読み込んで、それに基づいてHashMapを作成する方法です。
また、アプローチは最適なものであるか、パフォーマンスをさらに向上させる方法があります。