Commençons par éliminer StringTokenizer
. Il vieillit et ne prend même pas en charge les expressions régulières. Sa documentation indique:
StringTokenizer
est une classe héritée qui est conservée pour des raisons de compatibilité bien que son utilisation soit déconseillée dans le nouveau code. Il est recommandé à toute personne recherchant cette fonctionnalité d'utiliser la split
méthode de String
ou le java.util.regex
package à la place.
Alors jetons-le tout de suite. Cela laisse split()
et Scanner
. Quelle est la différence entre eux?
D'une part, split()
renvoie simplement un tableau, ce qui facilite l'utilisation d'une boucle foreach:
for (String token : input.split("\\s+") { ... }
Scanner
est construit plus comme un flux:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
ou
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Il a une API assez volumineuse , alors ne pensez pas qu'elle est toujours limitée à des choses aussi simples.)
Cette interface de style flux peut être utile pour analyser des fichiers texte simples ou des entrées de console, lorsque vous n'avez pas (ou ne pouvez pas obtenir) toutes les entrées avant de commencer l'analyse.
Personnellement, le seul moment où je me souviens avoir utilisé Scanner
est pour les projets scolaires, lorsque je devais obtenir les entrées de l'utilisateur à partir de la ligne de commande. Cela facilite ce genre d'opération. Mais si j'ai un String
que je veux séparer, c'est presque une évidence split()
.