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