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?
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
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:
- utilisant la méthode du Scanner: useDelimiter (String pattern)
- 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
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'.