Java:将文件内容转换为向量

时间:2013-02-15 10:19:04

标签: java

我正在尝试读取文件内容并将它们放在一个向量中并将其打印出来,但我有一些问题,它会反复打印内容!请帮忙看看我的代码有什么问题!谢谢!

这是我的代码:

public class Program5 {
public static void main(String[] args) throws Exception
       {
           Vector<Product> productList = new Vector<Product>();

           FileReader fr = new FileReader("Catalog.txt");
           Scanner in = new Scanner(fr);


           while(in.hasNextLine())
           {

               String data = in.nextLine();
               String[] result = data.split("\\, "); 

               String code = result[0];
               String desc = result[1];
               String price = result[2];
               String unit = result[3];

               Product a = new Product(desc, code, price, unit);

               productList.add(a);

               for(int j=0;j<productList.size();j++)             
               {                                
                   Product aProduct = productList.get(j);

                   System.out.println(aProduct.code+", "+aProduct.desc+", "+aProduct.price+" "+aProduct.unit+" ");                  
               }   

           }

       }

}

这是我正在尝试阅读的文件的内容以及它应该从我的代码中打印出来的内容:

K3876,Distilled Moonbeams,3.00美元,十几岁 P3487,冷凝水,每包2.50美元
Z9983,抗重力丸,12.75美元,60日

但这是我运行代码所得到的:

K3876,Distilled Moonbeams,每打3.00美元 K3876,Distilled Moonbeams,每打3.00美元 P3487,冷凝水,每包2.50美元
K3876,Distilled Moonbeams,每打3.00美元 P3487,冷凝水,每包2.50美元
Z9983,抗重力丸,60美元为12.75美元

3 个答案:

答案 0 :(得分:0)

for-loop移到外面。

//外面

for(int j=0;j<productList.size();j++)             
               {                               
               Product aProduct = productList.get(j);    
                   System.out.println(aProduct.code+", "+aProduct.desc+", "+aProduct.price+" "+aProduct.unit+" ");                  
               }  
顺便说一句,除非你关心线程安全,否则永远不要使用Vector。如果您不关心线程安全,可以使用 ArrayList (非常高效和快速)同步Vector的方法

答案 1 :(得分:0)

for-loop放在while循环的一边。嵌套for循环打印冗余数据。

Vector<Product> productList = new Vector<Product>();
...
while(in.hasNextLine()){
   ...
   productList.add(a);
}
for(int j=0;j<productList.size();j++){
   ....
}

答案 2 :(得分:0)

em,您可以尝试将“System.out.println(...)”移出“for”循环:

while(in.hasNextLine())
{

    String data = in.nextLine();
    String[] result = data.split("\\, "); 

    String code = result[0];
    String desc = result[1];
    String price = result[2];
    String unit = result[3];

    Product a = new Product(desc, code, price, unit);
    productList.add(a);

    for(int j=0;j<productList.size();j++)             
    {                                
        Product aProduct = productList.get(j);                  
    }
    System.out.println(aProduct.code+", "+aProduct.desc+", "+aProduct.price+" "+aProduct.unit+" ");

}