如何查找我的ArrayList中的项目数量?

时间:2016-03-08 02:32:06

标签: java arraylist

我目前正在处理项目euler 22,并且提示要求您从文件中读取超过5000个名称并对它们进行排序然后给它们赋值,尽管这不是我遇到的问题。我将名称读入ArrayList,但现在我想看看我的ArrayList中有多少项。我试着打印出names.size();但它只是打印出零。我假设这是因为只有一行?但是当我打印出names.get(数字);数字是我选择的任何数字,它打印出应该在该框中的名称。如何查看ArrayList中有多少项?我知道这与项目euler没有任何关系,只是想学习如何将来参考。我试着在网上查询如何做到这一点,但是无法让它发挥作用。谁能告诉我如何解释代码?这是我的代码:

import java.io.File;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class main{
public static void main(String[] args){
    String name;
    int row;
    int count=0;
    File filepath=new File("../names.txt");
    List<String> names=new ArrayList<String>();
    try{
        Scanner in=new Scanner(filepath);
        name=in.nextLine();
        while(in.hasNext()){
            names=Arrays.asList(name.split("\\s*,\\s*"));
        }
    }
    catch(Exception e){

    }
    System.out.println(names.size());
}
}

3 个答案:

答案 0 :(得分:2)

你的循环中需要names.add而不是赋值语句。

names.add(阵列....)

答案 1 :(得分:0)

我认为你有几个问题,但主要的问题是你使用的是与你想要的方式不匹配的正则表达式。假设你有一个文本文件在一行上有多个名称,可能有多行,这可以工作,而且更简单:

    import java.io.File;
    import java.util.Scanner;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Arrays;

    public static void main(String[] args){
        String name;
        int row;
        int count=0;
        File filepath=new File("names.txt");
        List<String> names=new ArrayList<String>();

        try{
            Scanner scan =new Scanner(filepath);
            String someNames = "";
            while(scan.hasNext()){
                someNames = scan.nextLine();
                List<String> namesList = Arrays.asList(someNames.split(" "));
                names.addAll(namesList);
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }

        System.out.println(names.size());
        for(String aName: names){
            System.out.println(aName);
        }
    }

如有必要,您可以更改拆分值,但请保持简单。 如果名称以逗号分隔,只需将split(" ")更改为split(",") 此外,在进入while循环之前,您正在执行scanner.nextLine(),从而丢失文件中的第一行。最后,请注意names.addAll(namesList),它可以保证您存储在一行中找到的所有名称。

答案 2 :(得分:0)

由于列表 names 是结果,因此您应该在结果的下一行添加新名称。我认为以下代码可能有用。

while(in.hasNext()){
    names.addAll(Arrays.asList(name.split("\\s*,\\s*")));
}