2010-09-10 3 views
1

Любой, кто мог бы помочь мне с java.util.Scanner class Я не могу точно выяснить, как использовать метод разделителя.Разделитель сканера 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) меня чтобы совместить и получить следующий шаблон.

Regex с группировкой, например:

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

Спасибо, Ill читать на регулярных выражений перегруппировки. ваш пример отлично работает. – Mss

+0

Стоит прочитать, чтобы убедиться, что вы понимаете код, но общая его суть является внешним (внутренним регулярным выражением) в круглых скобках, позволяющим извлекать определенные части соответствия для последующего использования. Итак, как простой пример, regex '' hay (nee + dle) stack "' с входом '' hayneeeeeeedlestack "' будет хранить в группе 1 '' neeeeeeedle''. –

+0

Также я не уверен в ваших точных форматах ввода и обработке ошибок, регулярное выражение, возможно, нуждается в настройке (например, может потребоваться '(. +?)' Вместо '(. *?)', Чтобы гарантировать, что команда1 не пусто). –

Смежные вопросы