【问题标题】:Best way to process strings in Java在 Java 中处理字符串的最佳方法
【发布时间】:2012-07-13 02:21:56
【问题描述】:

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

董事会:

bbbbw bbbb 万维网 wbwbw bwbwb

从文件中,然后输出如下内容:

登机:

bbbbw bbbb 万维网 万维网 bwbwb

我通过创建一个字符的二维数组 (char[][] board),将文件逐行读取为字符串,然后使用 String.charAt() 访问每个字符并将其存储在数组中。

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

请告诉我,我这样做是个白痴,并且有更好的方法来遍历文件 -> 字符串 -> 数组 -> 字符串 -> 文件进程。

【问题讨论】:

    标签: java string parsing


    【解决方案1】:

    您可以在读取文件时对每一行使用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]);
    }
    

    【讨论】:

      【解决方案2】:
      // Remember to handle whitespace chars in array
      char[] row = "wbbbw bbbbb wwwww wbwbw bwbwb".toCharArray()
      

      其他一切看起来都不错。

      【讨论】:

        【解决方案3】:

        为什么不使用现有的文本格式(例如 JSON)而不是自己发明?

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

        您可以获得直接从文件中轻松读取的好处(与您的原始方法一样)以及不必解析烦人的字符串格式的好处。

        【讨论】:

        • 使用 JSON 并为这样简单的事情添加一个库只是矫枉过正。如果 Java 有一个内置的 JSON 解析器,那就更合理了。
        【解决方案4】:
        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();
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-25
          • 2016-06-18
          • 2019-03-02
          相关资源
          最近更新 更多