Java Bufferedreader将文件拆分为由#分隔的7行段

时间:2014-03-09 23:38:45

标签: java string arraylist line bufferedreader

            br = new BufferedReader(new FileReader(inFile));
        String line;
        boolean justWrote = false;

             ArrayList<String> charRead = new ArrayList<String>();
             while ((line = br.readLine()) != null){
                 if (charRead.size() == 7 && !justWrote){
                     messageLoop.addAfter(charRead);
                     justWrote = true;
                 }
                 else if (line.startsWith("#")) {
                 }
                 else {
                 justWrote = false;
                 charRead.add(line);
                 }
             }

我正在使用一个存储7x5 ArrayLists的文本文件来存储一个字符的表示。在加载函数中,我试图为文件创建缓冲重新读取器,然后忽略以#开头的行,将行7一次存储到字符串的ArrayList中,然后将此ArrayList添加到现有数据结构中。

基本上需要做的是: 读完整个文件直到结束 当连续读取7行时,将字符串的ArrayList添加到数据结构中并重置ArrayList以查找接下来的7行 如果该行包含##########忽略它 IF行有效且我们还没有7,将该行添加到ArrayList

我遇到的问题是它是正确地通过并添加忽略########的所有行但是它仍然经历即使它到达结尾所以我最终得到数百行而不是正是我需要的。输入文件看起来像

  XXX 
 X   X
 X   X
 XXXXX
 X   X
 X   X
 X   X
########## 
 X
 X
 X
 X
 X
 X
 XXXXX
##########
 X
 X
 X
 X
 X
 X
 XXXXX
##########

当它在程序中打印时应该生成相同的输出,但它会打印多个实例,而且字符不是分开的。任何帮助解决这个问题都将受到赞赏。

应该生成相同的字符,但没有#########而只是一个空格(代码中已经处理空格只表示字符是分开的。)

1 个答案:

答案 0 :(得分:0)

我认为你需要在这里使用数据结构。特别是你需要一封信。 然后在字母上逐个读取7个字符,忽略#符号。 以下是在Java 7中如何做到这一点:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadLetters {
    static final int ROWS = 7;
    static class Letter {
        private final List<String> rows = new ArrayList<>();

        public void addRow(String row) {
            rows.add(row);
        }

        @Override
        public String toString() {
            String result = "";
            for (String row : rows) {
                result += row + System.lineSeparator();
            }
            return result;
        }
    }

    public static void main(String[] args) throws IOException {
        List<Letter> letters = new ArrayList<>();
        Letter current = new Letter();
        int rowCount = ROWS;
        try (BufferedReader br = new BufferedReader(new FileReader("path/to/the/file"))) {
            String line = br.readLine();

            while (line != null) {
                if (!line.startsWith("#")) {
                    current.addRow(line);
                    if (--rowCount <= 0) {
                        letters.add(current);
                        current = new Letter();
                        rowCount = ROWS;
                    }
                }
                line = br.readLine();
            }
        }
        for(Letter l : letters) {
            System.out.println(l);
            System.out.println("------");
        }
    }
}