我有一个问题,在我的程序中我想用Scanner读取.txt文件,txt文件如下:
10 2
20 3
30 5
40 6
750
我希望将每列存储在List
中,但将最后一行750
存储在int
变量中。我试过像:
public class Testing {
final static Charset ENCODING = StandardCharsets.UTF_8;
public static LinkedHashMap<Integer, Integer> readTextFile() throws IOException {
LinkedHashMap<Integer, Integer> finalT = new LinkedHashMap<Integer, Integer>();
int suma;
List<Bancnota> bancnote = new ArrayList<Bancnota>();
String userHomeFolder = System.getProperty("user.dir");
String finalPath = userHomeFolder + "/src/atm/TEST.txt";
Path path = Paths.get(finalPath);
try (Scanner scanner = new Scanner(path, ENCODING.name())) {
while (scanner.hasNext()) {
String line = scanner.nextLine();
String arr[] = line.split(" ");
if (arr.length == 2){
finalT.put(scanner.nextInt(), scanner.nextInt());
System.out.println(finalT);
} else {
suma = scanner.nextInt();
}
}
scanner.close();
}
return finalT;
}
但是当我从文本文件中删除750
并删除此部分
String line = scanner.nextLine();
String arr[] = line.split(" ");
if (arr.length == 2){
一切正常。有没有办法让扫描仪在最后一排停下来?谢谢
答案 0 :(得分:1)
这里有一些问题:
您的数据集" "
。这些数字由两个空格String.split
分隔,因此您的line.split(" ") -> {"10", "", "2"}
方法将生成一个包含三个条目的数组。 split(" ")
除非您使用Scanner
然后您使用scanner.nextLine();
错误。您使用scanner.nextInt()
阅读了整行,然后多次使用finalT.put(scanner.nextInt(), scanner.nextInt());
[...]
suma = scanner.nextInt();
。但是这将在你已阅读的行之后读取下一个数字
我想你想解析你读过的行中的整数。
所以我想你想要你的线
finalT.put(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]));
[...]
suma = Integer.parseInt(arr[0]);
是这样的:
$('.ui.dropdown').dropdown();
答案 1 :(得分:1)
将while循环更改为以下。
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String arr[] = line.split(" ");
if (arr.length == 2) {
finalT.put(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]));
System.out.println(finalT);
} else {
suma = Integer.parseInt(arr[0]);
}
}