【发布时间】:2020-08-05 03:22:10
【问题描述】:
我的代码基本上是这样的:
bufferedReader = new BufferedReader(new InputStreamReader(inputFile));
while ((currentLine = bufferedReader.readLine()) != null) {
Document document;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
document = dBuilder.parse(new InputSource(new StringReader(currentLine)));
document.getDocumentElement().normalize();
NodeList nList = document.getElementsByTagName("record");
int j = 0;
int k = 0;
while (j < lines) {
if (currentLine.contains(bList.get(k))) {
myList.add(currentLine);
bufferedReader.mark(0);
k++;
j++;
}
else if (myList.size() == bList.size()) {
break;
}
else {
j++;
}
}
我有一个 bufferedReader 逐行遍历文件。我想要的是根据该行是否包含 bList 中存在的字符串,将单次出现的行添加到 myList 中。无论出于何种原因,当我调试时,尽管 k++ 递增,bList 都不会移动到下一个索引。我也不确定使用 bufferedReader.mark(0) 是否正确,我之前使用 inputFile.getChannel().position(0);但我遇到了:
'错误:XML 文档结构必须在同一个实体内开始和结束'
我在调试时注意到的另一个问题是,当 myList 和 bList 的大小相等时,while 循环不会中断。相反,myList 一直保持到 34 的大小,而 bList 保持在 2 的大小。
编辑:添加更多行以提供一些上下文和理解
【问题讨论】:
-
我没有在代码中看到任何向
bList添加任何内容的内容,您为什么期望它会增长?此外,currentLine永远不会改变,我在任何地方都看不到BufferedReader呼叫。总而言之,代码似乎与您的描述不符。请你更新一下哪个是错的,好吗? -
您的意思是在循环中的某处更新
currentLine? -
能不能把你的xml加进去,方便大家指出,哪里结构不对?
-
@DmitriyPopov 由于 GDPR,我无法添加我的 XML 文件。
-
abidount:不,您发布的代码不会遍历任何内容。没有更新
currentLine。如果您的真实代码这样做,那么您需要发布Minimal, Reproducible Example。您“审查”了太多代码,因此争论是没有意义的。
标签: java loops while-loop bufferedreader increment