2010-09-10 4 views
1

Toute personne qui pourrait m'aider avec la classe java.util.Scanner Je n'arrive pas à comprendre exactement comment utiliser la méthode du délimiteur.Délimiteur de scanner Java

entrée: teamA-TeamB 4-5

sortie: teamA: TeamB: 4: -5

résultat escompté: teamA: TeamB: 4: 5

Pièce de mon code:

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"); 
} 

Répondre

0

personnellement, je le faire avec une correspondance des expressions rationnelles et le groupe, mais si vous allez utiliser un scanner ne se concentrent pas sur l'utilisation de délimiteurs, utilisez le hasNext(String) et me next(String) thodes pour correspondre et récupérer le modèle suivant.

Regex par exemple le regroupement:

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

Merci, Ill lire sur le regroupement regexp. Votre exemple fonctionne parfaitement. – Mss

+0

Cela vaut la peine d'être lu pour vous assurer de bien comprendre le code, mais l'essentiel est que les parenthèses 'external (regex interne) regex externe' vous permettent d'extraire certaines parties de la correspondance pour une utilisation ultérieure. Donc, comme un exemple simple, la regex '" hay (nee + dle) pile "' avec l'entrée '" hayneeeeeeedlestack "' stockerait dans le groupe 1 '" neeeeeeedle "'. –

+0

En outre, je ne suis pas sûr de votre format d'entrée exact et des exigences de gestion des erreurs, la regex pourrait avoir besoin de peaufiner (exemple, il pourrait avoir besoin de '(. +?)' '(. *?)' vide). –