在Java中将多数据类型文件读入ArrayList
我试图读取一个文件,用户输入该文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直被卡住,非常感谢您的帮助。这就是我所拥有的。很抱歉,如果已经回答了这个问题,我是该网站的新手在Java中将多数据类型文件读入ArrayList,java,arraylist,Java,Arraylist,我试图读取一个文件,用户输入该文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直被卡住,非常感谢您的帮助。这就是我所拥有的。很抱歉,如果已经回答了这个问题,我是该网站的新手 import java.util.*; import java.io.*; public class ArrayListClient { public static final int SIZE = 100; public static void main(String[] args)
import java.util.*;
import java.io.*;
public class ArrayListClient {
public static final int SIZE = 100;
public static void main(String[] args) throws FileNotFoundException {
String fileName, fileName2;
UnorderedArrayList list1 = new UnorderedArrayList(SIZE);
Scanner input = new Scanner(System.in);
System.out.print("Please input the name of the file to be opened for the first list: ");
fileName = input.nextLine();
System.out.println();
Scanner inputFile = new Scanner(new File(fileName));
int num = inputFile.nextInt();
while(inputFile.hasNextInt()) {
int num2 = inputFile.nextInt();
list1.insertEnd(num);
num = num2;
}
list1.print();
}
}
输入文件为13 c v b 25 34 x 67 56 10 a 20 27 2 a s 5 1 45 59您提供的循环是正确的,尽管您不需要while循环之外的这一行: 如果您提供的文件没有整数,那么这将使您的程序崩溃 我认为你可以简单地写下这句话,它应该会起作用:
while (inputFile.hasNextInt()) {
int num = inputFile.nextInt();
list1.insertEnd(num);
}
循环检查文件inputFile.hasNextInt中是否还有其他整数,然后将其添加到列表inputFile.nextInt。您提供的循环是正确的,尽管您不需要while循环之外的这一行: 如果您提供的文件没有整数,那么这将使您的程序崩溃 我认为你可以简单地写下这句话,它应该会起作用:
while (inputFile.hasNextInt()) {
int num = inputFile.nextInt();
list1.insertEnd(num);
}
循环检查文件inputFile.hasNextInt中是否还有另一个整数,然后将其添加到列表inputFile.nextInt。这听起来可能是一个家庭作业问题,所以我不太愿意给出答案,但如果我是你,我会考虑编写一个过滤函数,使它成为一个懒惰的过滤器,如果你必须考虑文件很大/不适合在内存中。您的筛选函数可以尝试Integer.parseIntyourString;并捕获由于试图解析字母而出现的任何NumberFormatException。这种方法有一个明显的危险,就是使用异常来控制通常被认为是不好的做法的程序流,但是您不必遍历列表两次 另一个明显的选择是编写一个过滤器,过滤掉字符,这样只剩下数字字符串,然后对这些数字字符串运行parseInt,将它们转换为整数值。如果性能是一个问题,您可以通过编写函数来避免双重遍历列表,该函数验证单个字符串值,如果它不是数字,则拒绝,如果它是数字,则将其解析为int,然后在进入foreach循环时将解析的整数添加到数组中
由于整数检测内置于Scanner类中,且integer类包含parseInt方法,因此大部分工作已经完成。只需改变一个数组,你可以在每个循环外定义一个数组,这样你就可以去了。 < P>这听起来可能是一个家庭作业问题,所以我很犹豫,只是给出答案,但是如果我是你,我会考虑写一个过滤函数,如果你必须考虑那些非常大的/不适合内存的文件,那它就是一个懒惰的过滤器。您的筛选函数可以尝试Integer.parseIntyourString;并捕获由于试图解析字母而出现的任何NumberFormatException。这种方法有一个明显的危险,就是使用异常来控制通常被认为是不好的做法的程序流,但是您不必遍历列表两次 另一个明显的选择是编写一个过滤器,过滤掉字符,这样只剩下数字字符串,然后对这些数字字符串运行parseInt,将它们转换为整数值。如果性能是一个问题,您可以通过编写函数来避免双重遍历列表,该函数验证单个字符串值,如果它不是数字,则拒绝,如果它是数字,则将其解析为int,然后在进入foreach循环时将解析的整数添加到数组中
由于整数检测内置于Scanner类中,且integer类包含parseInt方法,因此大部分工作已经完成。只要在for each循环之外修改一个数组,就可以了。如果有疑问,请阅读文档。如果有疑问,请阅读文档。这是我在下面写评论时发布的。这基本上是我试图向您指出的一个示例-使用Scanner类忽略非数字,然后这个示例不使用parseInt,因为我认为nextInt为您将数字解析为int,但如果不是,请知道Integer类在那里。这是在我写下面的评论时发布的。这基本上是我试图向您指出的一个示例-使用Scanner类忽略非数字,然后这个示例不使用parseInt,因为我认为nextInt为您将数字解析为int,但如果不是,请知道Integer类在那里。