JAVA:如何解析文本文件行中的整数(由可变数量的空格分隔)

Bob*_*Bob 5 java parsing integer line text-files

我想逐行解析文本文件中的数字.例如,想象_作为空间

我的文本文件内容如下:

___34_______45
_12___1000
____4______167
...
Run Code Online (Sandbox Code Playgroud)

我想你明白了.每行可以有可变数量的空格来分隔数字,这意味着根本没有模式.最简单的解决方案可以通过char读取char并检查它是否是一个数字,直到数字字符串的结尾并解析它.但必须有其他方式.我如何自动在Java中读取这些内容,以便我可以获得某个数据结构中的数组

[34,45]
[12,1000]
[4,167]
Run Code Online (Sandbox Code Playgroud)

Jon*_*son 11

使用java.util.Scanner.它有这个nextInt()方法,它完全符合你的要求.我认为你必须"手动"将它们放入一个数组中.

import java.util.Scanner;
public class A {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int v1 = in.nextInt(); //34
    int v2 = in.nextInt(); //45
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)


pb2*_*b2q 4

如果您只需要数据结构(例如平面数组)中的数字,那么您可以使用一个Scanner简单的循环来读取该文件。Scanner使用空格作为默认分隔符,跳过多个空格。

鉴于List ints

Scanner scan = new Scanner(file); // or pass an InputStream, String
while (scan.hasNext())
{
    ints.add(scan.nextInt());
    // ...
Run Code Online (Sandbox Code Playgroud)

您需要处理Scanner.nextInt.

但是您建议的输出数据结构使用多个数组,每行一个。您可以使用读取文件Scanner.nextLine()来获取单独的行作为String. 然后使用String.split正则表达式分割空格:

Scanner scan = new Scanner(file); // or InputStream
String line;
String[] strs;    
while (scan.hasNextLine())
{
    line = scan.nextLine();

    // trim so that we get rid of leading whitespace, which will end
    //    up in strs as an empty string
    strs = line.trim().split("\\s+");

    // convert strs to ints
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用第二个Scanner来标记内部循环中的每一行。Scanner将为您丢弃任何前导空格,因此您可以省略trim.