【问题标题】:Java - Parsing Text FileJava - 解析文本文件
【发布时间】:2011-04-28 13:55:43
【问题描述】:

我有一个这种格式的输入文本文件:

<target1> : <dep1> <dep2> ...
<target2> : <dep1> <dep2> ...
...

还有一个带有两个参数的方法

function(target, dep);

我需要得到这个解析来调用我的方法与每个目标和 dep 例如:

function(target1, dep1);
function(target1, dep2);
function(target1, ...);
function(target2, dep1);
function(target2, dep2);
function(target2, ...);

在文本文件的每一行上调用function(target,dep) 的最有效方法是什么?我试着用扫描仪和 string.split 鬼混,但没有成功。我被难住了。

谢谢。

【问题讨论】:

  • 扫描仪有什么问题?
  • 能把你写的代码贴一下吗?
  • 没有可发布的代码。我最初的想法是将每一行保存到一个字符串中,但由于 dep 的总数是未知的,它需要某种循环正确吗?
  • 逐行读取文件...在':'上分割每一行然后第一部分是目标,然后第二部分是所有deps,可以通过空间分割来分隔

标签: java parsing file-io java.util.scanner


【解决方案1】:
  • 将行读入String myLine
  • myLine 上的: 拆分为String[] array1
  • array1[1] 上的' ' 拆分为String[] array2
  • 遍历array2并调用function(array1[0], array2[i])

所以……

FileReader input = new FileReader("myFile");
BufferedReader bufRead = new BufferedReader(input);
String myLine = null;

while ( (myLine = bufRead.readLine()) != null)
{    
    String[] array1 = myLine.split(":");
    // check to make sure you have valid data
    String[] array2 = array1[1].split(" ");
    for (int i = 0; i < array2.length; i++)
        function(array1[0], array2[i]);
}

【讨论】:

  • 将每一行加载到自己的字符串中?还是使用 while(hasNextLine)?我理解拆分和迭代,但每行如何成为它自己的字符串?
  • 我刚刚提供了这个信息:)
  • 我现在明白了。感谢发帖。
  • 添加了FileReader 和循环。
【解决方案2】:

首先你必须从文件中读取行,然后在这个拆分读取行之后,所以你的代码应该是这样的:

FileInputStream fstream = new FileInputStream("your file name");
// or using Scaner
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
  // split string and call your function
}

【讨论】:

  • 文件应该存储在哪里?在项目文件夹还是src文件夹?
猜你喜欢
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多