Java 如何重复使用扫描仪?
我用一个方法创建了一个实用类,该方法接受用户输入,并返回它的小写版本,因此我没有太多重复代码,但它只能使用一次。之后,它就不会扫描了。我能做些什么来解决这个问题 p、 我看到很多人说重复使用扫描仪是个坏主意。为什么会这样?如果扫描器被重置,那不是很好吗Java 如何重复使用扫描仪?,java,java.util.scanner,Java,Java.util.scanner,我用一个方法创建了一个实用类,该方法接受用户输入,并返回它的小写版本,因此我没有太多重复代码,但它只能使用一次。之后,它就不会扫描了。我能做些什么来解决这个问题 p、 我看到很多人说重复使用扫描仪是个坏主意。为什么会这样?如果扫描器被重置,那不是很好吗 public String scan() { String input; Scanner s = new Scanner(System.in); if (s.hasNextLine()) { input =
public String scan() {
String input;
Scanner s = new Scanner(System.in);
if (s.hasNextLine()) {
input = s.nextLine();
} else {
input = "ERROR";
}
s.reset();
s.close();
return input.toLowerCase();
}
每次使用扫描仪时,您都是正确的,因为它会被重置。您的问题的解决方案如下:
在数组中添加要传递给
scan()
的所有参数,并在返回时使用for
循环将它们全部传递给scan()
,将它们再次添加到各自的阵列位置,这样您就可以方便地在任何地方重复使用它们。您实际上可以重复使用扫描仪,而不是每次需要读取一行时都创建一个新的扫描仪,下面是一个示例:
public class Test {
public static void main(String[] args) {
Test t = new Test();
//create your scanner object
Scanner s = new Scanner(System.in);
//send it as a parameter whenever you need to read a line
System.out.println(t.scan(s));
System.out.println(t.scan(s));
System.out.println(t.scan(s));
//close it after finishing
s.close();
}
public String scan(Scanner s) {
String input;
if (s.hasNextLine()) {
input = s.nextLine();
} else {
input = "ERROR";
}
return input.toLowerCase();
}
}
但是,如果您为自己创建了一个reader实用程序类,那么在实用程序类中作为实例变量更符合逻辑
例如:
public class Reader {
Scanner s ;
public Reader() {
s = new Scanner(System.in);
}
public String scan() {
String input;
if (s.hasNextLine()) {
input = s.nextLine();
} else {
input = "ERROR";
}
return input.toLowerCase();
}
public void close(){
s.close();
}
}
当你使用它时,它会是这样的:
public class Main {
public static void main(String[] args) {
//create your scanner object
Reader r = new Reader();
//send it whenever you need to read a line
System.out.println(r.scan());
System.out.println(r.scan());
System.out.println(r.scan());
//close it after finishing
r.close();
}
}
为什么要重复使用扫描仪?我觉得你的方法很好。将扫描仪的输入数据保存在内存中,然后重新使用数据,而不是扫描仪。如果以后有更多输入,请使用新的扫描仪。@TimBiegeleisen我将多次调用该方法,因此必须再次使用扫描仪。除非有更好的办法,否则我不知道how@waltersu你把它存到内存里是什么意思?你说要重用哪些数据?对不起,我对Java非常陌生重复使用扫描仪是个坏主意?创建数百个扫描仪来读取数百行是更好的主意吗?当然,您可以重用它,例如将行放在数组中。但您的代码和我的代码之间到底有什么区别?我看到s=新扫描仪(System.in);与扫描方法不在同一方法中,但这会如何改变情况,以及如何修复我做错的事情?顺便说一句,thx更新后的答案正是我想要的。为了解释这个场景,如果你需要阅读100万行,那么我们需要100万次对扫描函数的调用,这是常见的事情,现在的区别是你的代码将创建一个扫描对象->然后在阅读该行后将关闭流,这种情况也会发生100万次,这显然是不必要的开销。。在我的代码中,只为整个读取过程创建了一个扫描仪对象,在读取过程结束时创建了一个关闭操作。