在Java中处理字符串的最佳方法

时间:2012-07-13 02:21:56

标签: java string parsing

我想用文本文件制作一个生命游戏克隆来指定我的起始板,然后将完成的板写成类似格式的新文本文件。例如。加载这个:

董事会成员:

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;文件处理。

4 个答案:

答案 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]);
}