Comment utiliser un délimiteur dans le Scanner Java?

sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|rn");

Je ne comprends pas comment le délimiteur fonctionne, quelqu'un peut-il expliquer cela en termes simples?

36
demandé sur Jørgen R 2015-02-27 16:35:00

3 réponses

le scanner peut aussi utiliser des délimiteurs autres que les espaces.

Exemple facile de API de 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 de l' Scanner::useDelimiter. Trouver un useDelimiter tutoriel ici.


Pour commencer avec des expressions régulières ici vous pouvez trouver un bon tutoriel.

Notes

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
65
répondu Jordi Castilla 2016-07-21 07:06:33

avec le Scanner les délimiteurs par défaut sont les caractères blancs.

mais le Scanner peut définir où un token commence et se termine en fonction de un ensemble de séparateur, qui pourrait être indiquée de deux façons:

  1. utilisant la méthode du Scanner: useDelimiter (String pattern)
  2. utilisant la méthode du Scanner:useDelimiter(Motif) où modèle est une expression régulière qui spécifie le délimiteur défini.

useDelimiter() des méthodes sont utilisées pour tokeniser l'entrée du Scanner, et se comporter comme Classe StringTokenizer, jetez un oeil à ces tutoriels 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
7
répondu chŝdk 2015-04-22 10:01:46

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

ceci vous permettra d'utiliser Enter comme un délimiteur.

ainsi, si vous entrez:

Hello world (ENTER)

il imprimera 'Hello World'.

3
répondu Eugenio 2016-07-22 00:27:36