2012-07-13 57 views
1

我想用文本文件制作一个生命克隆游戏来指定我的开始板,然后用相似的格式将完成的板写入一个新的文本文件。例如。加载此:用Java处理字符串的最佳方法

局:从文件

 
wbbbw 
bbbbb 
wwwww 
wbwbw 
bwbwb 

,然后输出是这样的:

局指出:

 
wbbbw 
bbbbb 
wwwww 
wwwww 
bwbwb 

,我通过提出一个二维数组(这样做char[][] board),将文件逐行读入字符串,并使用String.charAt()访问每个字符并将其存储在数组中。

然后,我使用String.valueOf()将板的每个元素(即board[0], board[1]等)转换回字符串,并将其写入第二个文件中的新行。

请告诉我我这样做是一个白痴,并有一个更好的方式来通过文件 - >字符串 - >数组 - >字符串 - >文件过程。

回答

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]); 
} 
0
// Remember to handle whitespace chars in array 
char[] row = "wbbbw bbbbb wwwww wbwbw bwbwb".toCharArray() 

其他一切似乎都不错。

0

为什么不使用已有的文本格式(如JSON)而不是自己创建?

有大量的JSON解析器可以读写二维数组。

您既可以直接从文件中读取文件(就像使用原始方法一样),又可以不必解析烦人的字符串格式。

+1

使用JSON和添加一个库的东西很简单,这只是矫枉过正。如果Java有一个内置的JSON解析器,那么它会更合理。 – LanguagesNamedAfterCofee 2012-07-13 02:35:33

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(); 
     } 
    } 
}