Java Buffered Reader将文件分成以#分隔的7行段


            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的数组列表,存储一个字符的表示。在加载函数中,我试图为文件创建一个bufferedreader,然后忽略以#开头的行,一次存储7行到字符串的ArrayList中,然后将这个ArrayList添加到现有的数据结构中。

基本上需要发生的是:读取整个文件直到结束当一行读取7行时,将字符串的数组列表添加到数据结构中,并将数组列表重置为查找接下来的7行如果该行包含##########,则忽略它如果行是有效的而我们还没有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
##########

在程序中打印时,它应该产生相同的输出,但它打印了多个实例,并且字符不是分开的。如果您能帮忙解决这个问题,我将不胜感激。

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

我认为这里需要使用数据结构。尤其是写信时,你需要一个。然后依次读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("------");
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新