用java代码实现读取一个文件中所以的txt文件逐行读取txt文件中的内容清除所以空格和换行,判断如果等于字符串[INTRO]时,之后的读取内容方式改为两行读取内容,内容不能为空格和换行,如果等于字符串优待政策时,就改为多行读取,结束标记为服务设施,如果等于字符串服务设施时,就改为多行读取,结束标记为[GRADE],如果等于字符串[GRADE]时,就按照逐行读取内容,最后将这些数据输出
时间: 2024-03-20 13:44:06 浏览: 155
好的,以下是可能的 Java 代码实现,注释中有详细的解释:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) throws IOException {
// 读取的文件路径
String filePath = "example.txt";
// 初始化读取方式和结束标记
ReadType readType = ReadType.LINE_BY_LINE;
String endTag = "";
// 初始化逐行读取的字符串
StringBuilder lineContent = new StringBuilder();
// 读取文件
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
// 清除空格和换行
line = line.trim();
if (line.equals("[INTRO]")) {
// 如果等于 [INTRO],改为两行读取
readType = ReadType.TWO_LINES;
// 清空逐行读取的字符串
lineContent.setLength(0);
} else if (line.equals("优待政策")) {
// 如果等于 优待政策,改为多行读取,结束标记为 服务设施
readType = ReadType.MULTI_LINES;
endTag = "服务设施";
// 清空逐行读取的字符串
lineContent.setLength(0);
} else if (line.equals("服务设施")) {
// 如果等于 服务设施,改为多行读取,结束标记为 [GRADE]
readType = ReadType.MULTI_LINES;
endTag = "[GRADE]";
// 清空逐行读取的字符串
lineContent.setLength(0);
} else if (line.equals("[GRADE]")) {
// 如果等于 [GRADE],改回逐行读取
readType = ReadType.LINE_BY_LINE;
// 清空逐行读取的字符串
lineContent.setLength(0);
} else {
// 其他情况下,根据读取方式读取内容
switch (readType) {
case LINE_BY_LINE:
// 逐行读取,直接输出
System.out.println(line);
break;
case TWO_LINES:
// 两行读取,将内容拼接到逐行读取的字符串中
lineContent.append(line);
if (lineContent.length() >= 2) {
// 两行读取完毕,输出
System.out.println(lineContent.toString());
// 切换回逐行读取
readType = ReadType.LINE_BY_LINE;
// 清空逐行读取的字符串
lineContent.setLength(0);
}
break;
case MULTI_LINES:
// 多行读取,将内容拼接到逐行读取的字符串中
if (!line.isEmpty() && !line.equals(endTag)) {
lineContent.append(line);
lineContent.append(System.lineSeparator());
} else {
if (lineContent.length() > 0) {
// 多行读取完毕,输出
System.out.println(lineContent.toString());
// 切换回逐行读取
readType = ReadType.LINE_BY_LINE;
// 清空逐行读取的字符串
lineContent.setLength(0);
}
if (line.equals(endTag)) {
// 到达结束标记,切换回逐行读取
readType = ReadType.LINE_BY_LINE;
// 清空逐行读取的字符串
lineContent.setLength(0);
}
}
break;
}
}
}
}
}
enum ReadType {
LINE_BY_LINE, // 逐行读取
TWO_LINES, // 两行读取
MULTI_LINES // 多行读取
}
}
```
需要注意的是,上述代码仅是一个示例,实际使用时需要根据具体情况进行修改和优化。
阅读全文