Как разделить элементы из файла csv

если у меня есть следующий файл CSV

Как разделить элементы из файла csv

как я могу разделить название предмета и количество и проигнорировать название магазина в списке хэш-карты?

Вот что я сделал до сих пор:

public class ListRead {

    HashMap<String, Integer> csvList = new HashMap<>();

    public void loadManifest() throws IOException {

        FileReader ListCSV = new FileReader("list.csv");
        BufferedReader reader = new BufferedReader(ListCSV);

        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;

            String[] listElement = line.split(",");
            System.out.println(Arrays.toString(listElement));

            // add to csvList

        }


    }

}

Результат при печати listElement:

[>Shop A]

[shirt, 325]

[jeans, 475]

[>Shop B]

[car, 2]

[phone, 120]

[charger, 250]

Желаемый результат ?? И, пожалуйста, не вставляйте скриншоты при публикации

Yati Sawhney 23.05.2018 07:40

Вам нужен список для обоих магазинов? А и Б?

Rcordoval 23.05.2018 07:40

Вы хотите сохранить информацию о том, из какого магазина поступил каждый товар?

Tim Biegeleisen 23.05.2018 07:40

Я хочу, чтобы имя элемента и количество сохранялись в Hashmap <String, Integer> соответственно. Игнорирование названия магазина

csse 23.05.2018 07:44

будет ли файл всегда иметь '>' с названием магазина?

Derick Daniel 23.05.2018 08:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы хотите игнорировать название магазина, то подойдет простой парсер:

Map<String, Integer> map = new HashMap<>();
String line;
String currentShop = null;

while ((line = reader.readLine()) != null) {
    if (!line.matches(">.*,")) {
        String[] listElement = line.split(",");
        map.put(listElement[0], Integer.parseInt(listElement[1]));
    }
}

Логика здесь в том, что если мы встречаем строку магазина, обозначенную >, за которой следует название магазина и запятая, то мы не пытаемся проанализировать эту строку на карте. Кроме того, я предполагаю, что разделитель для строк данных - это просто запятые, а не пробелы. Если вы ожидаете пробелов, вы можете вместо этого разбить что-то вроде \s*,\s*.

Код, который вы упомянули, правильно разбирает строку. Все, что вам нужно сделать, это вставить эти элементы в созданную хэш-карту.

if (line.charAt(0)!='>')
{
    int quantity = Integer.parseInt(listElement[1].trim());
    String item = listElement[0].trim();
    csvList.put( item , quantity); 
}

Кроме того, при необходимости вы можете добавить еще одну карту для хранения названий магазинов. Приведенный выше код просто игнорирует информацию о магазине.

Другие вопросы по теме