当前位置: 首页 > 知识库问答 >
问题:

扫描仪不能自动关闭

孟和玉
2023-03-14
package org.test;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegTest {
    public static void main(String[] args) throws InterruptedException {
        String str = readLine("Enter String :");
        String patternString = readLine("Enter pattern to search :");

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);

        System.out.print("match positions: "); // matches positions
        while(matcher.find()) {
            System.out.print(matcher.start() + " ");
        }
        System.out.println("");
    }


    static String readLine(String message){
        String strLine;
            try (Scanner in = new Scanner(System.in)) {
                System.out.println(message);
                strLine= in.nextLine();
            }
        return strLine;
    }
}

输出为:

输入字符串:
WEWEW
输入模式搜索:
线程“main”java.util.NoSuchelementException:在java.util.scanner.nextline(scanner.java:1585)
在org.test.regtest.readline(regtest.java:39)
在org.test.regtest.main(regtest.java:22)

共有1个答案

袁泓
2023-03-14

当使用资源尝试(autoclosable)关闭扫描器时,它也会关闭inputstream,使其在将来不可用。

由于System.in是全局inputstream,这意味着第二个扫描程序不能从inputstream中读取任何内容,因为它已经关闭,并且它会抛出异常。

我会更改代码以重用sanner进行两次读取。

public static void main(String[] args) throws InterruptedException {
    try (Scanner in = new Scanner(System.in)) {
        String str = readLine(in, "Enter String :");
        String patternString = readLine(in, "Enter pattern to search :");

        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(str);

        System.out.print("match positions: "); // matches positions
        while (matcher.find()) {
            System.out.print(matcher.start() + " ");
        }
        System.out.println("");
    }

}

static String readLine(Scanner in, String message) {
    String strLine;
    System.out.println(message);
    strLine = in.nextLine();
    return strLine;
}
 类似资料:
  • 问题内容: 我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。 所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方

  • 我试图将应用程序中大量且经常使用的部分重新划分为不同的方法,以使其更容易维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了扫描仪和系统。但当我关闭扫描仪时,我也会关闭系统。在里面 所以我的问题是,我只能阻止系统。通过使用CloseShieldInputStream屏蔽它来关闭,还是我应该开始向方法传递一个扫描器?

  • 问题内容: 我正在开发游戏,但扫描仪遇到了一个小问题。我收到了一个从未关闭过的资源泄漏扫描程序。 但是我认为我的扫描仪在没有关闭之前就可以正常工作。但是现在不是。有人可以帮我吗? 问题答案: 我假设您正在使用Java 7,因此会收到编译器警告,当您不关闭资源时,通常应在finally块中关闭扫描程序。 甚至更好:使用新的 Try with resource语句 :

  • e、 (g) 此扫描仪工作不正常。但在删除close()后,它可以正常工作。 我想原因是“ystem.in”有问题。 请给我答案。 非常感谢。 )首先在a()中调用input.nextLine(),然后在b()中调用scan.nextInt()。我有错误,如NoSuchElementExcema。

  • 位于java.util.scanner.throwfor(未知源)位于java.util.scanner.next(未知源)的线程“main”java.util.NoSuchelementException中出现异常**** 我多次调用s(扫描器),在第二次调用时出现运行时错误。这是由于关闭扫描仪,并可能再次使用它。我的问题是,每次使用Scanner时,我都会创建一个新的Scanner实例,那么为

  • 我集成了Zxing QR扫描仪库。这是我的应用程序/版本。格拉德尔 在方法中,我有 所以,当应用程序启动时,冲洗灯打开。然后我按下“启动QR扫描仪”按钮,启动QR扫描仪,我得到了预期的解析结果。 这是用于解析二维码的代码: 我的问题是: ZXing QR扫描仪会自动关闭闪光灯(我的要求是在黑暗环境中扫描,因此必须有灯光) 我还发布了日志的一部分: 我怎样才能保持齐平灯打开?