2015-08-14 31 views
0

自動關閉不能使用掃描儀

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

當噸他嘗試使用資源(可自動關閉)關閉掃描儀,同時關閉輸入流,使其不能在將來使用。

由於System.in是一個全局輸入流,它意味着第二個掃描器無法從輸入流中讀取任何東西,因爲它已關閉並引發異常。

我會更改代碼以重新使用這兩個讀取的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; 
} 
+0

謝謝!這將有所幫助。 – Akshay