我正在制作应用程序,以减少我自己的风俗txt文件。我发现了无法解决的问题。 我有两个arraylist与行之间的位置我要删除文本。问题是该函数计算所有所需的行并将其添加到arraylist。因此,如果我删除第52行,第62行(下一行)将是第61行,依此类推。我怎么解决这个问题?
这是我的功能:
public void countDesiredLines() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(
"D:\\Temp.txt"));
int lines = 0;
boolean has_it = false;
String line = null;
while ((line = reader.readLine()) != null) {
lines++;
if (has_it == true) {
has_it = false;
if ("".equals(line)) {
position.add(lines);
}
}
if (line.startsWith("[Content]")) {
has_it = true;
}
}
reader.close();
}
我已将其更改为此但发生了同样的错误。
答案 0 :(得分:0)
开始从下到上删除空白行。
或 如果你从上到下开始,你可以遵循这个伪代码:
1) counter=0
2) while a line is available for removal, delete (line_no - counter)th line
3) counter++;
4) goto 2.
答案 1 :(得分:0)
由于我没有看到分两个阶段做到这一点的理由,一个单阶段解决方案怎么样。 这是一个解决方案:
import java.io.*;
public class Test {
private static final String lineSeparator = System.lineSeparator();
public void removeBadLinesFromFile(String filename) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(filename));
boolean content = false;
String line = null;
while ((line = br.readLine()) != null) {
if (content) {
content = false;
if (line.isEmpty()) {
// skip this line, and the next three
br.readLine();
br.readLine();
br.readLine();
continue;
}
}
if (line.startsWith("[Content]"))
content = true;
sb.append(line);
sb.append(lineSeparator);
}
br.close();
FileWriter fw = new FileWriter(filename);
fw.write(sb.toString());
fw.close();
}
public static void main(String... args) throws IOException {
Test test = new Test();
test.removeBadLinesFromFile("Test.txt");
}
}