繁体   English   中英

如何从Java中的文本文件读取Integer

[英]how to read Integer from a text file in Java

我正在尝试读取包含Java中整数值的文件,并且为此找到了以下答案:

Java:将文件中的整数读入数组

但是我的代码陷入了无限循环。

我的代码是:

Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
        //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));

           int i = 0,count=0;
           while(scanner.hasNextInt())
           {
                System.out.println("This is count "+count);
               count++;
           }

上面的代码陷入无限循环。

我的文本文件包含:

317

40

280

10

318

24

456

126

4

129

404

468

287

275

165

我遇到了另一个问题,当我尝试将元素存储在int数组中时,它将引发异常;

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Hybrid.Image.main(Image.java:503) 

我存储数组元素的代码是:

  int tall[] =new int[count];
   int tall1[] =new int[count];
   while(scanner.hasNextInt())
   {
        int k=scanner.nextInt();
        tall[i] =k;
        System.out.println(tall[i]);
        i++;
   }

循环永远不会结束,因为条件永远不会改变。 您仅在检查扫描仪是否具有“下一个int ”,而从未真正读取过该int 因此,随时可以读取文件中的第一个int

如果您不关心那个int是什么,而只想从扫描仪中读取它,则可以这样做,而只需忽略该值:

while(scanner.hasNextInt())
{
    scanner.nextInt();
    System.out.println("This is count "+count);
    count++;
}

另外,如果您确实想对该int ,则它将位于scanner.nextInt()的返回值中。

如下所示更改代码,因为您永远不会获取该值。

Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
        //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));

           int i = 0,count=0;
           while(scanner.hasNextInt())
           {
                scanner.nextInt()
                System.out.println("This is count "+count);
               count++;
           }

创建Scanner它具有内部状态。 当您使用scanner.nextXXX() API从数据中获取数据时,可以更改此状态。

scanner.hasNextInt() 不会更改state 只检查它。 scanner.nextInt()确实更改了其状态,然后在下次调用它时,它将获取下一个数据。

您忘记移动光标。

扫描仪通过读取输入流来工作。 您可以想象将整个文件放在一个长字符串中,然后将光标放在文件的开头。 然后,当您调用.hasNextInt()时,您将询问扫描程序当前位置光标前是否有整数。 如果存在,它将返回true,但实际上不会移动光标。 仅当您调用nextInt()时,光标才会移动。 而scan.nextInt()也将返回一个整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM