Некорректное отображение вывода из файла
Необходимо вывести данные из файла Фамилия-Цифра. Если фамилия повторилась, то цифры сложить.
Пользуюсь встроенным в Windows блокнотом.
Ввод: Петров 0.501 Иванов 1.35 Петренко 1 Петров 0.85 Петренко 0.25
Все числа складываются, имена сортируются. Но что бы я не добавлял, вывод всегда корректный кроме одной строки. Петров 0.501 всегда выбрасывается последний и не складывается с предыдущим.
ВЫВОД: Иванов 1.35 Петренко 1.25 Петров 0.85 Петров 0.501
BufferedReader reader = new BufferedReader(new FileReader(args[0]));
String line;
Map<String, Double> map = new TreeMap<>();
while ((line = reader.readLine()) != null) {
if (map.containsKey(line.split(" ")[0])) {
map.replace(line.split(" ")[0], map.get(line.split(" ")[0]) + Double.parseDouble(line.split(" ")[1]));
} else {
map.put(line.split(" ")[0], Double.parseDouble(line.split(" ")[1]));
}
}
reader.close();
for (Map.Entry<String, Double> pair: map.entrySet()) {
System.out.println(pair.getKey() + " " + pair.getValue());
}
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Попробуйте так я чуток подправил код,
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.util.Map;
import java.util.TreeMap;
public class App {
public static void main(String[] args) {
try {
URI uri = App.class.getClassLoader().getResource("test.txt").toURI();
try (FileReader file = new FileReader(new File(uri))) {
BufferedReader reader = new BufferedReader(file);
String line;
Map<String, Double> map = new TreeMap<>();
while ((line = reader.readLine()) != null) {
String key = line.split(" ")[0].trim();
String value = line.split(" ")[1].trim();
System.out.println("Read " + key + ": " + value);
if (map.containsKey(key)) {
map.replace(key, map.get(key) + Double.parseDouble(value));
System.out.println("Updated Map " + key + ": " + map.get(key));
} else {
map.put(key, Double.parseDouble(value));
System.out.println("Added Map " + key + ": " + map.get(key));
}
}
System.out.println("Output:");
for (Map.Entry<String, Double> pair : map.entrySet()) {
System.out.println(pair.getKey() + ": " + pair.getValue());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
ресурсный текст файл
Результат.





