我在文件中有一些购物项目,由" |"分隔。
Adam|grocery|veggies|100.00
John|fuel|gasoline|42.60
John|grocery|veggies|20.00
销售税为8.75%。
输出:
Total Revenue:
Adam - $100.00
John - $62.60
Tax - 14.22
Shopping by Adam:
Grocery - $100.00
Tax - $8.75
Shopping by John:
Fuel - 44.60
Grocery - 20.00
Tax - $5.47
我使用下面的代码阅读该文件,然后创建一个HashMap
,其中String
为密钥(以保存客户名称),值为另一个HashMap
(用于保存类别(名称)类别作为关键,价格作为价值))
package test;
import java.io.*;
import java.util.*;
public class GroceryStore {
public static void main(String[] args) {
try {
File inFile = new File("/Users/customers.txt");
Scanner scan = new Scanner(inFile);
String lines = "";
Map<String, HashMap<String, Double>> map = new HashMap<String, HashMap<String, Double>>();
while (scan.hasNextLine()) {
lines = scan.nextLine();
String[] wordSplit = lines.split("\\|");
HashMap<String, Double> category = new HashMap<String, Double>();
category.put(wordSplit[1], Double.parseDouble(wordSplit[3]));
map.put(wordSplit[0], category);
}
System.out.println("Total revenue by customer: ");
for (Map.Entry<String, HashMap<String, Double>> entry : map.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
但它没有像我想的那样工作,无法继续。
在while
循环的最后一步中,使用map.put
时。这是用新购买替换该人购买的先前条目。但是我希望跟踪该人的所有购买条目。然后我们应该能够显示总输出和分类输出。
任何人都可以帮忙解决这个问题,你可能有不同的方法吗?
答案 0 :(得分:0)
此代码未经测试,使用python的csv库将行存储在字典中,并将键作为第一列,在本例中为人名。
import csv
data = {}
with open('/Users/customers.txt', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter='|', quotechar='"')
for row in spamreader:
data[row[0]] = row
print data