2010-09-10 100 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