我正在尝试读取用户输入的文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直卡住,帮助将非常感激。这就是我所拥有的。对不起,如果已经回答,我是网站的新手。
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 x 67 56 10 a a 20 27 2 a s 5 1 45 59
答案 0 :(得分:4)
您提供的循环是正确的,但您不需要在while
循环之外使用此行:
int num = inputFile.nextInt();
如果您提供的文件没有Integer
,那么这会导致您的程序崩溃。
我认为你可以简单地写这个并且应该有效:
while (inputFile.hasNextInt()) {
int num = inputFile.nextInt();
list1.insertEnd(num);
}
循环检查文件中是否还有另一个Integer
(inputFile.hasNextInt()
),然后将其添加到列表中(inputFile.nextInt()
)。
答案 1 :(得分:1)
这听起来像是一个家庭作业问题,所以我只是犹豫不决,只是给出了答案,但如果我是你,我会考虑编写一个过滤函数(如果你不得不考虑文件,那就把它变成一个懒惰的过滤器非常大/不适合内存)。你的过滤函数可以尝试Integer.parseInt(yourString);并捕获因尝试解析字母而发生的任何NumberFormatExceptions。这种方法具有使用异常来控制程序流的明显危险(通常被认为是不好的做法),但您不必遍历列表两次。
另一个显而易见的选择是编写一个过滤器来过滤字符,这样你只剩下数字字符串,然后在这些数字字符串上运行parseInt将它们变成整数值。如果性能是一个问题,你可以通过编写验证单个字符串值的函数来避免双遍遍列表(如果它不是数字则拒绝),然后如果它是一个数字则将其解析为int,然后添加解析在foreach循环中进入数组时整数。
由于整数检测内置于Scanner类中,并且Integer类包含parseInt()方法,因此您已经完成了大部分工作。只需改变你为每个循环定义的数组,你就可以了。