我目前正在处理项目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());
}
}
答案 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*")));
}