Не проходит последний пункт.
Регулярное выражение работает для положительных и для отрицательных чисел. Лишних строк в TreeSet не добавляется. Всех Петровых и Ивановых друг с другом сопоставляет. Добавил проверку на так называемый BOM-символ.
package com.javarush.task.task19.task1919;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(args[0]));
Map<String, String> map = new TreeMap<>();
String line;
String name;
String salary;
while (reader.ready()) {
line = reader.readLine();
// Проверка на наличие BOM-символа
if (line.charAt(0) == '\uFEFF') line = line.substring(1);
name = line.replaceFirst("([^\\d\\-]+)(-?\\d+[.]\\d+|\\d+)", "$1");
salary = line.replaceFirst("([^\\d\\-]+)(-?\\d+[.]\\d+|\\d+)", "$2");
if (!map.containsKey(name)) map.put(name, salary);
else {
salary ="" + (Double.parseDouble(salary) + Double.parseDouble(map.get(name)));
map.replace(name, salary);
}
}
reader.close();
for (Map.Entry entry : map.entrySet()) {
System.out.println(String.format("%s%s", entry.getKey(), entry.getValue()));
}
}
}