Java读取txt文件,将数据同过第一次出现A和第二次出现A的多行数据分成数据块,并判断数据块中其中某一行是否包含B,如果包含则写出。
时间: 2024-10-11 11:09:04 浏览: 18
C++从txt文档里读取数据并且输出
5星 · 资源好评率100%
在Java中,处理这种情况可以使用字符串缓冲和遍历的方式,先分割出包含两次'A'的数据块,然后再对每个数据块进行搜索。以下是一个基本的示例代码:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
public class SplitAndSearch {
public static void main(String[] args) {
String filePath = "path_to_your_txt_file.txt";
String keywordA = "A";
String keywordB = "B";
List<String> dataBlocks = new ArrayList<>();
StringBuilder blockBuilder = new StringBuilder(); // 存储当前数据块
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
boolean isSecondAFound = false; // 标记是否找到第二个"A"
while ((line = reader.readLine()) != null) {
if (line.contains(keywordA)) {
if (!isSecondAFound) {
blockBuilder.append(line).append("\n"); // 如果第一次遇到"A",添加到块中
isSecondAFound = true; // 设置标志
} else {
dataBlocks.add(blockBuilder.toString()); // 如果已找到第二次"A",收集并开始新的块
blockBuilder.setLength(0); // 清空当前块
}
} else {
blockBuilder.append(line).append("\n");
}
}
// 检查最后一个数据块
if (!blockBuilder.isEmpty()) {
dataBlocks.add(blockBuilder.toString());
}
for (String block : dataBlocks) {
if (block.contains(keywordB)) {
System.out.println("Block containing both 'A' and 'B':\n" + block);
}
}
} catch (IOException e) {
System.err.println("Error reading file: " + e.getMessage());
}
}
}
```
这段代码首先读取文件,每次遇到'A'标记一个新的数据块,当再次遇到'A'时,认为已经形成了一个完整的数据块,并将其存储到列表中。然后遍历每个数据块,查找是否存在'B'。
阅读全文