我有一个从文本文件中读取的扫描仪。当它到达文件中的某一行时,我希望能够调用一个方法,该方法使用Scanner作为当前状态的参数 - 例如,我希望扫描程序被传递(连同所使用的文件)at它到底是什么线。
public static void createEntry(File list, int mediaTypeNum, String mediaType) throws FileNotFoundException {
Scanner mediaReader = new Scanner(list);
int occurrence = mediaTypeNum;
int scannerCounter = 0;
String match;
String title = "";
String director = "";
while (mediaReader.hasNext() && scannerCounter < occurrence) {
match = mediaReader.nextLine();
if (match.equalsIgnoreCase(mediaType)) {
scannerCounter++;
if (scannerCounter == occurrence) {
// based on type, create the media object
// createMediaObject(list, mediaReader, mediaType)
title = mediaReader.nextLine();
director = mediaReader.nextLine();
}
}
}
createMediaObject()将有一个开关案例,根据案例,扫描仪将读取一些以下行,直到有一个空行。对于每种媒体类型,行数不同。
提前谢谢!
答案 0 :(得分:6)
当然,事实上,Java中的任何对象都是如此。在任何时候都不会创建对象的隐式副本。*
你需要注意的是Scanner
有一个“顺序”状态,如果你经常传递它,很容易忘记它处于什么状态。特别是如果有条件的话执行处理,其中不同的执行路径可能最终将其留在不同的位置。
一个好的方法是始终在方法Javadoc中记录Scanner
预期处于什么状态以及最后留下的状态。
*这个声明有一个很大的警告:多线程。但是在这里详细讨论这个问题将是非常不合时宜的主题。
答案 1 :(得分:2)
不确定。您将引用传递给Scanner对象,以便接收者看到相同的实例和相同的状态。