как разделить элементы из CSV-файла - PullRequest
0 голосов
/ 23 мая 2018

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

enter image description here

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

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

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]

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

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

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

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

0 голосов
/ 23 мая 2018

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

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*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...