gpt4 book ai didi

Java:多行文件读取迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:10 25 4
gpt4 key购买 nike

我正在尝试重写 LineIterator 类 (org.apache.commons.io) 中的 next()nextLine() 方法。基本上我想指定每次调用从文本文件读取的最大行数(基类的默认值当然是 1)。

这是我提出的派生类。不幸的是,它抛出了 StackOverflowError 异常。

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

import org.apache.commons.io.LineIterator;

public class MultiLineIterator extends LineIterator{
int maxLines = 1;

public static void main(String[] args) throws Exception {
File file = new File ("/path/to/inputfile.txt");

LineIterator iterator = new MultiLineIterator(new FileReader(file), 3);

while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}


public MultiLineIterator(Reader reader, int maxLines) {
super(reader);
this.maxLines = maxLines;
}

@Override
public String next() {
String retVal = null;
if(hasNext()) {
retVal = "";
}

String nextFragment = "";
for(int i = 1; i <= maxLines; i++) {
if(hasNext()) {
nextFragment = super.next();
retVal += (nextFragment + " ");
}
else
break;
}
return retVal;
}


@Override
public String nextLine() {
return next();
}
}

最佳答案

要修复 StackOverflowError,您应该删除:

@Override
public String nextLine() {
return next();
}

,因为你有无限递归:

this:next() -> super:next() -> this:nextLine() -> this:next() -> ...等等

另外,我建议不要重写 next() 方法,这样会导致结果不一致。我建议使用简单的计数器。在下一行增加它并检查 hasNext 上的计数器:

public class MultiLineIterator extends LineIterator {
private int maxLines = 1;
private int cursor = 0;

public static void main(String[] args) throws Exception {
File file = new File("/path/inputfile.txt");

LineIterator iterator = new MultiLineIterator(new FileReader(file), 3);

while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}

public MultiLineIterator(Reader reader, int maxLines) {
super(reader);
this.maxLines = maxLines;
}

@Override
public boolean hasNext() {
return (cursor < maxLines) && super.hasNext();
}

@Override
public String next() {
String next = super.next();
cursor++;
return next;
}
}

在此实现中,我们不连接行,而只是限制数量。

关于Java:多行文件读取迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57934730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com