Java 返回.txt文件中的行数
这是我在这里的第一个问题,所以我会尽可能地澄清 我有一个像这样的句子.txt文件: 加拉塔萨雷昨晚1-0击败尤文图斯 我要去任何你找不到我的地方 木瓜真好吃 该死的演讲者从来不会给超过70个 你在想什么 很明显,这里有5个句子,我的目标是编写一个listSize方法,返回这里列出的句子数Java 返回.txt文件中的行数,java,methods,return,Java,Methods,Return,这是我在这里的第一个问题,所以我会尽可能地澄清 我有一个像这样的句子.txt文件: 加拉塔萨雷昨晚1-0击败尤文图斯 我要去任何你找不到我的地方 木瓜真好吃 该死的演讲者从来不会给超过70个 你在想什么 很明显,这里有5个句子,我的目标是编写一个listSize方法,返回这里列出的句子数 public int listSize() { // the code is supposed to be here. return sentence_total;} 非常感谢您的帮助。要读取文件并计算其行
public int listSize()
{
// the code is supposed to be here.
return sentence_total;}
非常感谢您的帮助。要读取文件并计算其行数,请使用插入
文件读取器上的java.io.LineNumberReader
。对它调用readLine()
,直到它返回null
,然后getLineNumber()
以知道最后一个行号,就完成了
或者(Java 7+),您可以使用NIO2Files
类立即将文件完全读取到列表中,然后返回该列表的大小
顺便说一句,我不明白为什么您的方法将int
作为一个参数,它应该是要计算并返回的值?使用以下代码获取该文件中的行数
try {
File file = new File("filePath");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
int totalLines = 0;
while((line = reader.readLine()) != null) {
totalLines++;
}
reader.close();
System.out.println(totalLines);
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
你可以做:
Path file = Paths.getPath("route/to/myFile.txt");
int numLines = Files.readAllLlines(file).size();
如果要限制它们或懒散地处理它们:
Path file = Paths.getPath("route/to/myFile.txt");
int numLines = Files.llines(file).limit(maxLines).collect(Collectors.counting...);
使用:
尝试这种方法,这样你就可以在路上学到一些东西,而不是抄袭其他方法。我的目的是将int参数作为句子数返回。如果这是错误的,我愿意在理解了我应该做的事情后更改它。如果是基元类型,则您接受作为参数的int
。您可以在方法内部本地更改其值,但该更改对方法调用方之后将不可见,因为Java参数是按值传递的(即,您在方法内部看到的参数是调用方传递的变量的副本)。使用Files.readAllLines()
的问题是,它会将所有行读入内存;这可能是合适的,也可能不是。但是对于如此短的文件,性能不会成为问题,并且在方法返回时将立即收集字符串列表。或者,使用转义分析,它也可能根本不被JVM实例化。但总的来说,你是对的,知道我提到的两种解决方案之间的区别很重要。我在这里只看到5句话。哎呀!请立即更正。在发布问题之前,您是否可以对您的方法多做一些陈述,并让我们知道您的想法方向?在提出此问题之前,您尝试了哪些方法。你能展示一些我们可以帮助我改进的代码吗?我很困惑,什么都做不了这是填鸭式的。你应该避免这种情况。在理解它的编写原因之前,我不会从这里得到任何信息,所以不用担心。是的,但是第二个版本也一样?不,第二个版本不会将所有内容加载到内存中。流是惰性填充的;)
LineNumberReader reader = new LineNumberReader(new FileReader(new File("sentences.txt")));
reader.skip(Long.MAX_VALUE);
System.out.println(reader.getLineNumber() + 1); // +1 because line index starts at 0
reader.close();