解析大约700行文本,将这些行分开并将它们用作变量?

时间:2012-04-22 16:50:25

标签: java parsing

不必经过700-800行文本,而是每行都有以下几种变体:

-5,-8,0:2.0

我有一个方法我必须将每一行传递给anotherclass.setBlock(xCoord, yCoord, zCoord, id)。所以对于上面的例子,它将是:

anotherclass.setBlock(x-5, y-8, 0, 2);

有没有办法解析每一行文字并执行此操作?我一直在寻找年龄,这要么是因为我找不到正确的方法来解决这个问题,要么根本找不到答案。

我尝试过手动操作,但在100行之后,它开始觉得效率很低。我不能真正使用for循环,因为坐标不是连续的(或者更确切地说,它们是,但只有1或2行)。

1 个答案:

答案 0 :(得分:5)

import static java.lang.Double.parseDouble;
import static java.lang.Integer.parseInt;
import static java.util.regex.Pattern.compile;

...

public static void main(String[] args) {
  BufferedReader r = null;
  try {
    r = new BufferedReader(new InputStreamReader(
        new FileInputStream("myfile.txt"), "UTF-8"));
    final Pattern p = compile("(.+?),(.+?),(.+?):(.+)");
    String line;
    while ((line = r.readLine()) != null) {
      final Matcher m = p.matcher(line);
      if (!m.matches())
        throw new RuntimeException("Line in invalid format: " + line);
      anotherclass.setBlock(parseInt(m.group(1)), parseInt(m.group(2)), 
          parseInt(m.group(3)), parseDouble(m.group(4)));
    }  
  }
  catch (IOException e) { throw new RuntimeException(e); }
  finally { try { if (r != null) r.close(); } catch (IOEXception e) {} }
}