如何将scan.nextLine()的输出传入另一个Scanner?Java技术问题
解决方法
方案1:将每行字符串包装成Scanner传入
你可以把读取到的text字符串,通过new Scanner(text)创建一个新的Scanner实例传给printDuplicates,匹配方法的参数类型。修改后的代码如下:
public static void inputStats(Scanner scan) throws FileNotFoundException { while (scan.hasNextLine()) { String text = scan.nextLine(); // 将字符串包装为Scanner传入 printDuplicates(new Scanner(text)); } }
如果担心资源泄漏,可以用try-with-resources自动关闭临时Scanner:
public static void inputStats(Scanner scan) throws FileNotFoundException { while (scan.hasNextLine()) { String text = scan.nextLine(); try (Scanner lineScanner = new Scanner(text)) { printDuplicates(lineScanner); } // 自动关闭lineScanner } }
方案2:修改printDuplicates的参数类型(更推荐)
既然你要处理的是单行文本,没必要强行传Scanner。直接把printDuplicates的参数改成String,在方法内部如果需要用Scanner处理该行内容,再创建Scanner即可,逻辑更清晰。
修改后的printDuplicates方法定义:
public static void printDuplicates(String line) { // 内部创建Scanner处理该行 try (Scanner scan = new Scanner(line)) { // 原有的扫描逻辑 // ... } }
对应的调用代码保持printDuplicates(text);即可,不会再报错。
内容的提问来源于stack exchange,提问作者snowman
相关产品推荐
相关产品推荐

