9

直接来自此 Scanner API

String input = "1 fish 2 fish red fish blue fish";
     Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
     System.out.println(s.nextInt());
     System.out.println(s.nextInt());
     System.out.println(s.next());
     System.out.println(s.next());
     s.close(); 
4

6 回答 6

5

首先我们养成习惯;然后我们的习惯造就了我们。

我会说关闭流,因为像在finally块中关闭资源这样根深蒂固的习惯是有意义的。

于 2013-07-30T11:24:12.157 回答
2

我不这么认为,但最好还是关闭它,以防您更改代码以使用流。这也是一个好习惯,你真正想养成的习惯。

于 2013-07-30T11:23:02.647 回答
2

即使扫描仪不是流,您也需要关闭它以表明您已完成其底层流[1]。像 Eclipse 这样的 IDE 经常会发出警告说你有一个“资源泄漏:'扫描仪'永远不会关闭”。

注意: 不要关闭与System.in绑定的扫描程序!由于 System.in 对象是由 JVM 打开的,你应该把它留给 JVM 来关闭它[2]

于 2020-03-11T09:15:23.783 回答
1

Scanner如果我们不关闭String,就不会有资源泄漏。在内部new Scanner(String)创建一个StringReader作为基础源,当我们关闭Scanner它时,它会关闭StringReader,这不起作用。

于 2013-07-30T11:29:01.673 回答
0

如果您希望将Scanner标记为已关闭(以便对该对象的所有后续操作将立即失败),那么您必须调用Scanner.close()

于 2013-07-30T11:29:06.467 回答
0

我相信使用scanner.close()是个好主意;我这样说是因为它可以防止资源泄漏,如果您养成这种习惯,那么它将对您非常有益。

于 2017-09-24T17:22:53.523 回答