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