从文件中读取多行中的多个值(Java)

Posted

技术标签:

【中文标题】从文件中读取多行中的多个值(Java)【英文标题】:Reading multiple values in multiple lines from file (Java) 【发布时间】:2014-05-08 00:49:37 【问题描述】:

有没有办法将文件逐行读入Java,每行都有一系列整数(每行不同数量的整数)。例如:

2 5

1 3 4 5

2 4 8

2 3 5 7 8

等等

我会将每行中的行号和数字读入一个二维数组。

现在,这是我的代码:

int i=1, j;
try
  Scanner sc=new Scanner(new File("mapinput.txt"));
  while(sc.hasNext())
    String line=sc.nextLine();
    while(line!=null)
      j=sc.nextInt();
      Adj[i][j]=1;
    
    i++;        
  
 catch(Exception e)System.err.println(e);;

我知道,这段代码的问题在于它在字符串行之后读取整数;我希望它读取那一行中的数字。有没有办法从字符串中读取数字?

更新: 我决定使用 StringTokenizer 路线;但是,当它到达我文件的最后一行时,我收到 java.util.NoSuchElementException: No line found 错误。这是我更新的代码:

try
  Scanner sc=new Scanner(new File("mapinput.txt"));
  String line=sc.nextLine();
  st=new StringTokenizer(line, " ");
  do
    while(st.hasMoreTokens())
      j=Integer.parseInt(st.nextToken());
      Adj[i][j]=1;
    
    line=sc.nextLine();
    st=new StringTokenizer(line, " ");
    i++;        
  while(st.hasMoreTokens());
 catch(Exception e)System.err.println(e);;

【问题讨论】:

读入一行后,将该行拆分为 ' ' 字符。 问题是调用 sc.nextLine() 使扫描仪前进一行(因此跳过一行),然后您调用 sc.nextInt() 读取该位置旁边的 int。 【参考方案1】:

一旦您阅读了一行,您就可以进行以下操作

String[] ar=line.split(" ");

并根据您的要求使用字符串数组

【讨论】:

【参考方案2】:

查看 Java 库中的 #StringTokenizer 类。

您可以轻松地遍历文件并提取由空格分隔的integers。它可以很好地处理两个 + 位整数。

要直接回答您的问题,有一种方法可以从String 获取数字。

看看

Integer.parseInt(String s);  

这会从String 返回一个integer

文档是here

String s1 = "15 ";
String s2 = "03";
int answer = Integer.parseInt(s1.trim()) + Integer.parseInt(s2.trim());
System.out.println(answer);

打印出来:

18

【讨论】:

String s1 = "15 " 最后有一个空格可能是错字(没关系)所以无法解析... :) 这是一个错字。但是,您可以使用 .trim() 调用处理前导和尾随空格。谢谢

以上是关于从文件中读取多行中的多个值(Java)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python 中的文件/流中懒惰地读取多个 JSON 值?

Pentaho PDI/Kettle 从文本文件中读取多行

如何使用 MAC OSX 中的“默认值”从 plist 文件中一次读取多个值

从 pyspark 中的多行文件中读取 JSON 文件

Jmeter读取CSV参数化文件

C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据