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

Java 如何查找ArrayList中的项目数量?,java,arraylist,Java,Arraylist,我目前正在处理ProjectEuler22,提示要求您从一个文件中读取5000多个名称并对它们进行排序,然后给它们赋值,尽管这不是我遇到的问题。我将名称读入ArrayList,但现在我想查看ArrayList中有多少项。我试着打印出名字;但它只是打印出零。我想这是因为只有一排?但当我打印出名字时,我会忘记;当number是我选择的任意数字时,它会打印出应该在该框中的名称。如何查看我的ArrayList中有多少项?我知道这与project euler没有任何关系,但我只是想学习如何使用它以供将来参

我目前正在处理ProjectEuler22,提示要求您从一个文件中读取5000多个名称并对它们进行排序,然后给它们赋值,尽管这不是我遇到的问题。我将名称读入ArrayList,但现在我想查看ArrayList中有多少项。我试着打印出名字;但它只是打印出零。我想这是因为只有一排?但当我打印出名字时,我会忘记;当number是我选择的任意数字时,它会打印出应该在该框中的名称。如何查看我的ArrayList中有多少项?我知道这与project 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());
}
}
导入java.io.File;
导入java.util.Scanner;
导入java.util.List;
导入java.util.ArrayList;
导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
字符串名;
int行;
整数计数=0;
文件路径=新文件(“../names.txt”);
列表名称=新的ArrayList();
试一试{
扫描仪输入=新扫描仪(文件路径);
name=in.nextLine();
while(在.hasNext()中){
名称=数组.asList(名称.split(“\\s*,\\s*”);
}
}
捕获(例外e){
}
System.out.println(names.size());
}
}

您需要名称。请在循环中添加,而不是在赋值语句中添加


names.add(array…)

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

    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);
        }
    }
导入java.io.File;
导入java.util.Scanner;
导入java.util.List;
导入java.util.ArrayList;
导入java.util.array;
公共静态void main(字符串[]args){
字符串名;
int行;
整数计数=0;
文件路径=新文件(“names.txt”);
列表名称=新的ArrayList();
试一试{
扫描仪扫描=新扫描仪(文件路径);
字符串someNames=“”;
while(scan.hasNext()){
someNames=scan.nextLine();
List namesList=Arrays.asList(someNames.split(“”));
name.addAll(名称列表);
}
}
捕获(例外e){
e、 printStackTrace();
}
System.out.println(names.size());
for(字符串名称:名称){
系统输出打印项次(aName);
}
}
如果需要,可以更改分割值,但要保持简单。 如果名称以逗号分隔,只需将
split(“”
更改为
split(“”,“”
另外,在进入while循环之前,您正在执行scanner.nextLine(),丢失了文件中的第一行。最后,请注意
names.addAll(namesList)
,它确保您存储在一行中找到的所有名称。

由于列表名称是结果,您应该在结果的下一行添加新名称。我认为下面的代码可以工作

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

哇…不要给你的班级命名
main
那不好。您还应该阅读并遵循常见的命名约定,您不应该只捕获异常而对其不做任何处理。你怎么知道你是不是犯了一个错误你只是吃了它。您至少应该执行类似于e.printStackTrace()或System.err.println(e.getMessage())的操作;以及,新的ArrayList(Arrays.asList(arr));是首选。而不仅仅是数组。。因为这会重新返回静态数组。输入文件的格式是什么?举例说明