web-dev-qa-db-fra.com

Comment utiliser un délimiteur dans Java Scanner?

sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|\r\n");

Je ne comprends pas comment fonctionne le délimiteur. Quelqu'un peut-il expliquer cela en termes profanes?

46
NoMoreErrors

Le scanner peut également utiliser des délimiteurs autres que des espaces.

Exemple simple de API Scanner :

_ String input = "1 fish 2 fish red fish blue fish";

 // \\s* means 0 or more repetitions of any whitespace character 
 // fish is the pattern to find
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");

 System.out.println(s.nextInt());   // prints: 1
 System.out.println(s.nextInt());   // prints: 2
 System.out.println(s.next());      // prints: red
 System.out.println(s.next());      // prints: blue

 // don't forget to close the scanner!!
 s.close(); 
_

Le but est de comprendre les expressions régulières ( regex ) à l'intérieur du Scanner::useDelimiter . Trouvez un tutoriel useDelimiter ici .


Pour commencer par les expressions régulières vous pouvez trouver ici un tutoriel de Nice.

Remarques

_abc…    Letters
123…    Digits
\d      Any Digit
\D      Any Non-digit character
.       Any Character
\.      Period
[abc]   Only a, b, or c
[^abc]  Not a, b, nor c
[a-z]   Characters a to z
[0-9]   Numbers 0 to 9
\w      Any Alphanumeric character
\W      Any Non-alphanumeric character
{m}     m Repetitions
{m,n}   m to n Repetitions
*       Zero or more repetitions
+       One or more repetitions
?       Optional character
\s      Any Whitespace
\S      Any Non-whitespace character
^…$     Starts and ends
(…)     Capture Group
(a(bc)) Capture Sub-group
(.*)    Capture all
(ab|cd) Matches ab or cd
_
75
Jordi Castilla

Avec Scanner, les délimiteurs par défaut sont les caractères d'espacement.

Mais Scanner peut définir où un jeton commence et se termine en fonction de un ensemble de délimiteurs , qui peuvent être spécifiés de deux manières:

  1. Utilisation de la méthode Scanner: useDelimiter (String pattern)
  2. Utilisation de la méthode Scanner: useDelimiter (Pattern pattern) où Pattern est une expression régulière qui spécifie le jeu de délimiteurs.

Ainsi, les méthodes useDelimiter() sont utilisées pour scinder l'entrée Scanner et se comportent comme classe StringTokenizer , consultez ces didacticiels pour plus d'informations:

Et voici un Exemple :

public static void main(String[] args) {

    // Initialize Scanner object
    Scanner scan = new Scanner("Anna Mills/Female/18");
    // initialize the string delimiter
    scan.useDelimiter("/");
    // Printing the tokenized Strings
    while(scan.hasNext()){
        System.out.println(scan.next());
    }
    // closing the scanner stream
    scan.close();
}

Imprime cette sortie:

Anna Mills
Female
18
9
cнŝdk

Par exemple:

String myInput = null;
Scanner myscan = new Scanner(System.in).useDelimiter("\\n");
System.out.println("Enter your input: ");
myInput = myscan.next();
System.out.println(myInput);

Cela vous permettra d'utiliser Enter comme délimiteur.

Ainsi, si vous entrez:

Hello world (ENTER)

il affichera 'Hello World'.

3
Eugenio