Java Scanner - 在最后一行停止

时间:2016-01-14 12:59:15

标签: java list java.util.scanner

我有一个问题,在我的程序中我想用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){
一切正常。有没有办法让扫描仪在最后一排停下来?谢谢

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]);
            }
        }