有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我目前正在处理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());
}
}

共 (3) 个答案

  1. # 1 楼答案

    你需要名字。添加到循环中,而不是赋值语句中

    名字。添加(数组…)

  2. # 2 楼答案

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

        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),它确保您存储在一行中找到的所有名称

  3. # 3 楼答案

    因为列表名称就是结果,所以应该在结果的下一行添加新名称。我认为下面的代码可能有效

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