我想用文本文件制作一个生命游戏克隆来指定我的起始板,然后将完成的板写成类似格式的新文本文件。例如。加载这个:
董事会成员:
wbbbw bbbbb wwwww wbwbw bwbwb从文件中
,然后输出如下内容:
出局:
wbbbw bbbbb wwwww wwwww bwbwb
我这样做是通过制作一个二维数组(char[][] board
)字符,逐行读取文件到一个字符串,并使用String.charAt()
访问每个字符并将其存储在数组中。< / p>
之后,我将每个元素元素(即board[0]
,board[1]
等)转换回使用String.valueOf()
的字符串,然后将其写入第二档。
请告诉我,我是这样做的白痴,并且有更好的方法来浏览文件 - &gt; string - &gt;数组 - &gt; string - &gt;文件处理。
答案 0 :(得分:0)
// Remember to handle whitespace chars in array
char[] row = "wbbbw bbbbb wwwww wbwbw bwbwb".toCharArray()
其他一切似乎都很好。
答案 1 :(得分:0)
为什么不使用现有的文本格式(如JSON)而不是发明自己的文本格式?
有大量的JSON解析器可以读写二维数组。
您可以直接从文件中轻松阅读(与原始方法一样),并且无需解析烦人的字符串格式。
答案 2 :(得分:0)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class GameOfLife
{
private String mFilename;
private ArrayList<String> mLines;
public GameOfLife(String filename)
{
mFilename = filename;
read();
}
public char get(int x, int y)
{
String line = mLines.get(y);
return line.charAt(x);
}
public void set(char c, int x, int y)
{
String line = mLines.get(y);
String replacement = line.substring(0, x) + c + line.substring(x + 1, line.length());
mLines.set(y, replacement);
}
private void read()
{
mLines = new ArrayList<String>();
try
{
BufferedReader in = new BufferedReader(new FileReader(mFilename));
String line = in.readLine();
while (line != null)
{
mLines.add(line);
line = in.readLine();
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void write()
{
try
{
BufferedWriter out = new BufferedWriter(new FileWriter(mFilename));
for (String line : mLines)
{
out.write(line + "\n");
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
答案 3 :(得分:0)
您可以在阅读文件时为每行使用String.toCharArray()
。
char[][] board = new char[5][];
int i = 0;
while((line = buffRdr.readLine()) != null) {
board[i++] = line.toCharArray();
}
同时撰写String.valueOf()
或java.util.Arrays.toString()
。
for(int i=0; i<board.length; i++) {
//write Arrays.toString(board[i]);
}