Существует файл report.CSV.
Задача программы посчитать сколько раз встречается слово из колонки К
и посчитать сумму чисел из колонки R
по каждому слову из колонки К
.
Вот программа:
public class CSVtestclass {
public static void main(String[] args) throws IOException {
String FileName = "c:\\TestJava\\report.csv";
File file = new File(FileName);
Map<String, WordInfo> wordInfoMap = new HashMap<>();
try(BufferedReader read = new BufferedReader(new FileReader(file))){
String s;
String wordName;
HashMap<String, int[]> stringIntegerHashMap = new HashMap<>();
read.readLine();
while( (s = read.readLine()) != null) {
String[] next = s.split(";");
wordName = next[10];
if (stringIntegerHashMap.containsKey(wordName)) {
int[] ints = stringIntegerHashMap.get(wordName);
ints[0]++;
ints[1] += Integer.parseInt(next[17]);
} else {
stringIntegerHashMap.put(wordName, new int[]{1, Integer.parseInt(next[17])});
}
}
for (Map.Entry<String, int[]> pair: stringIntegerHashMap.entrySet()) {
int[] value = pair.getValue();
System.out.printf("%s zayavki: %d interakcii: %d%n", pair.getKey(), value[0], value[1]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Во время выполнения программы выходит ошибка:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""0""
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:638)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at CSVpack.CSVtestclass.main(CSVtestclass.java:31)
Где я ошибся?
public class CSVtestclass {
public static void main(String[] args) throws IOException {
String FileName = "c:\\TestJava\\report.csv";
File file = new File(FileName);
Map<String, WordInfo> wordInfoMap = new HashMap<>();
try (BufferedReader read = new BufferedReader(new FileReader(file))) {
String s;
String wordName;
HashMap<String, int[]> stringIntegerHashMap = new HashMap<>();
read.readLine();
while ((s = read.readLine()) != null) {
try {
String[] next = s.split(";");
wordName = next[10];
next[17] = next[17].replace("\"", "");
if (stringIntegerHashMap.containsKey(wordName)) {
int[] ints = stringIntegerHashMap.get(wordName);
ints[0]++;
ints[1] += Integer.parseInt(next[17]);
} else {
stringIntegerHashMap.put(wordName, new int[]{1, Integer.parseInt(next[17])});
}
} catch (NumberFormatException e) {
System.out.println(e);
}
}
for (Map.Entry<String, int[]> pair : stringIntegerHashMap.entrySet()) {
int[] value = pair.getValue();
System.out.printf("%s zayavki: %d interakcii: %d%n", pair.getKey(), value[0], value[1]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Есть несколько важных моментов... 1. Исключение летит из-за того, что 0 у вас записан не просто как 0, а как "0". Это нельзя распарсить. Кавычки придется убирать руками, если вы хотите , чтобы ве работало. 2.В N-ной строке в ячейке, которую вы пытаетесь распарсить содержится просто текст. Тут задача совсем непосильная, сами решайте, что с этим текстом делать. 3. Парс - потенциально опасное место с точки зрения исключительных ситуаций. Посему настоятельно рекомендуется обрамлять такое блоками try-catch.
Итого, замену кавычек я добавил, блок try-catch тоже. В блоке обычный вывод в консоль сообщения с исключением, соответственно, при запуске увидите строку, текста, которую, разумеется, никак в цифры не превратишь, сами решите, что именно прописать в блоке try-catch уже в зависимости от бизнес-задачи. Удачи
Exception in thread "main" java.lang.NumberFormatException: For input string: ""0""
Сообщает о том, что вы пытаетесь преобразовать "0" в число. Но какому числу соответствует "?
перед переводом строки в число удалите оттуда все лишние
string.replaceAll("\"", ""); - в вашем случае
string.replaceAll("\\D", ""); - для удаления всех символов (не чисел)
Конкретно вам в блоке else перед вложением в мапу (31 строка) надо выполнить команды :
String number = next[17].replaceAll("\"", "");
int value = Integer.parseInt(number);
либо короче:
int value = Integer.parseInt(next[17].replaceAll("\"", ""));
и положить это в мапу.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Опыты ставились над переменной int numberК двоичному виду приводил при помощи Integer
Пример обновления в инстаграме
Пусть у меня есть массив testКак мне сделать так, чтобы он сохранялся в sharedPreferences при выходе из программы и загружался при входе?
Загружаю ключ из памяти телефона, декодирую из base64 в byte, получаю ключ и дальше уже работаю с нимНо при запуске программа выдает ошибку