gpt4 book ai didi

java - 关于可能重用java Scanner的简单问题?

转载 作者:行者123 更新时间:2023-12-01 11:53:45 24 4
gpt4 key购买 nike

我对 java 还很陌生,是否可以重新使用 Scanner 对象?下面的例子是我正在读取一个文件来计算字符、单词和行数。我知道必须有一种更好的方法来仅使用一个扫描仪对象进行计数,但这不是要点。我只是想知道为什么有 input.close() 但没有 input.open()input.reset 等。因为我实际上是读取同一个文件,是否可以只创建一个 Scanner 对象并传递 3 个方法来使用?谢谢

public class Test {

/**
* @throws java.io.FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
File file = new File("demo.java");
Scanner input = new Scanner(file);
Scanner input2 = new Scanner(file);
Scanner input3 = new Scanner(file);
int lines = 0;
int words = 0;
int characters = 0;

checkCharacters(input3);
checkLines(input);
checkwords(input2);

}

private static void checkLines(Scanner input) {
int count = 0;
while (input.hasNext()) {

String temp = input.nextLine();
String result = temp;
count++;
}
System.out.printf("%d lines \n", count);
}

private static void checkwords(Scanner input2) {
int count = 0;
while (input2.hasNext()) {
String temp = input2.next();
String result = temp;
count++;
}
System.out.printf("%d words \n", count);
}

private static void checkCharacters(Scanner input3) {
int count = 0;
while (input3.hasNext()) {
String temp = input3.nextLine();
String result = temp;
count += temp.length();
}
System.out.printf("%d characters \n", count);
}
}

最佳答案

不,无法通过扫描仪上的方法重置扫描仪。如果您将 InputStream 传递到扫描仪中,然后直接重置流,您也许可以做到这一点,但我认为这不值得。

您似乎解析相同的文件 3 次并处理相同的输入 3 次。这看起来像是浪费处理。您不能一次执行全部 3 次计数吗?

private static int[] getCounts(Scanner input) {

int[] counts = new int[3];

while(input.hasNextLine()){
String line = input.nextLine();
counts[0]++; // lines

counts[2]+=line.length(); //chars

//count words
//for simplicity make a new scanner could probably be better
//using regex or StringTokenizer
try(Scanner wordScanner = new Scanner(line)){
while (wordScanner.hasNext()) {
wordScanner.next();
count[1] ++; //words
}
}
}

return counts;

}

当然,面向对象的方法是返回一个名为 Counts 的新对象,其中包含 getNumLines()getNumChars() 方法> 等等

编辑

需要注意的一件事是,我的计算与您在原始问题中的计算相同。我不确定计数是否始终准确,尤其是字符,因为扫描仪可能不会返回所有行尾字符,因此字符计数可能会关闭,如果存在连续的空白行,行数可能会关闭?您需要对此进行测试。

关于java - 关于可能重用java Scanner的简单问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592070/

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