如果我有以下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]
答案 0 :(得分:0)
如果你想忽略商店名称,那么一个简单的解析器就可以:
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*
之类的东西。
答案 1 :(得分:0)
您提到的代码正确解析了该行。您现在要做的就是将这些项插入到创建的hashmap中。
if(line.charAt(0)!='>')
{
int quantity = Integer.parseInt(listElement[1].trim());
String item = listElement[0].trim();
csvList.put( item , quantity);
}
此外,如果需要,您可能还想添加另一个地图来存储商店名称。上面的代码只是忽略了商店信息。