扫描仪和字符串比较

时间:2013-12-07 06:35:02

标签: java string

我在文件中有以下文字:

3
apple   4 1.00 
chicken 1 3.25 
cookie 38 0.25
avocado 1 4.00 
blueberries 1 5.00 
chicken 2 3.25 
milk    9 4.50 
tomato 27 0.50 
chicken 2 3.25

我想列出每个项目及其编号和价格但我希望如果我再次遇到相同的项目,将其编号添加到我现有的编号

我想出了第一部分,但我无法得到第二部分任何一个有任何想法?

public static void main(String[] args) throws FileNotFoundException{
        Scanner  sc = new Scanner(new File("Groceries.txt"));
        while(sc.hasNext()) {
            String line=sc.nextLine();
            Scanner ss = new Scanner(line);
            if(ss.hasNextInt()) {
                ss.next();
            }
            while(ss.hasNext()) {
                String name=ss.next();
                int number = readInt(ss);
                double price = ss.nextDouble();
                System.out.printf("The item is %s its number is %d and its price is %.1f\n",name,number,price);
            }
        }
    }
    public static int readInt(Scanner sc) {
        while(!sc.hasNextInt()) {
            sc.hasNext();
        }
        return sc.nextInt();
    }

2 个答案:

答案 0 :(得分:1)

像这样创建一个容器对象:

public class Container
{
     private String item;
     private double cost;
     ...
}

使用HashMap<Container, Double>作为您的数据结构。每次遇到重复内容时,都要更新其值。

如果有可能进行任意数量的重复,您可以使用以下操作:

public class ValueContainer
{
    private int count;
    private double value;
}

并拥有HashMap<Container, ValueContainer>,并相应更新。你在问题和评论中说的话似乎有些混乱。无论如何,通过简单的替换,这个结构将带您到达您想去的地方。

答案 1 :(得分:1)

  1. 创建一个描述项目属性的类(名称,价格,数量,计数等)。
  2. 创建项目列表(是的,使用泛型..)//您也可以使用地图而不是列表..
  3. 现在,对于从文本文件中读取的每一行,首先使用split()获取项目名称。
  4. 检查项目是否已存在。如果是,请将其取出,增加计数并将其取回。如果否,则将新项目添加到列表中。

  5. 快乐编码......