2010-09-10 102 views
1

任何可以幫助我使用java.util.Scanner類的人 我無法弄清楚如何使用分隔符方法。Java掃描器分隔符

輸入:teamA-teamB 4-5

輸出:teamA:teamB:4:-5

預期輸出:teamA:teamB:4:5

的我的代碼件:

public void readResult(){ 
    String team1, team2; 
    int goals1, goals2; 
    Scanner scanner = new Scanner(System.in); 
    scanner.useDelimiter("\\s*-\\s*"); 
    if (scanner.hasNext()){ 
     team1 = scanner.next(); 
     scanner.useDelimiter("\\d*-\\d*"); 
     if(scanner.hasNext()){ 
     team2 = scanner.next().trim(); 
     scanner.useDelimiter("-"); 
     if(scanner.hasNext()){ 
      goals1 = scanner.nextInt(); 
      scanner.useDelimiter("\\n"); 
      if(scanner.hasNext()){ 
       goals2 = scanner.nextInt(); 
       System.out.println(team1 + ":" + team2 + ":" + goals1 + ":" + goals2); 
       scanner.close(); 
       return; 
      } 
     } 
     } 
    } 
    scanner.close(); 
    System.out.println("bad format"); 
} 

回答

0

我會親自做這個用正則表達式和組匹配,但是如果你要使用掃描儀不注重使用的分隔符,使用hasNext(String)next(String)我以匹配和檢索下一個模式。

正則表達式與分組例如:

String input ="teamA-teamB 4-5"; 
    String team1, team2; 
    int goals1, goals2; 

    Matcher matcher = 
     Pattern.compile("(.*?)\\s*-\\s*(.*?)\\s*(\\d*)\\s*-\\s*(\\d*)") 
     .matcher(input); 
    if (matcher.matches()) { 
     team1 = matcher.group(1); 
     team2 = matcher.group(2); 
     goals1 = Integer.parseInt(matcher.group(3)); 
     goals2 = Integer.parseInt(matcher.group(4)); 
     System.out.println(team1 + ":" + team2 + ":" + goals1 + ":" + goals2); 
    } 
+0

謝謝,生病的正則表達式,分組讀了。你的例子完美地工作。 – Mss 2010-09-10 20:15:41

+0

這是值得一讀,以確保您瞭解代碼,但它的一般要點是括號外(正則表達式)外正則表達式允許您提取匹配的某些部分供以後使用。作爲一個簡單的例子,正則表達式「hay(nee + dle)stack」與輸入「hayneeeeeeedlestack」'將存儲在第1組中''neeeeeeedle「'。 – 2010-09-10 20:31:00

+0

另外我不確定你的確切輸入格式和錯誤處理要求,正則表達式可能需要調整(例如,它可能需要'(。+?)'而不是'(。*?)'來確保team1不是空)。 – 2010-09-10 20:31:49