0

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行のみです)。

4

1 に答える 1

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) {} }
}
于 2012-04-22T17:02:01.930 に答える