48 votes

Pourquoi StringTokenizer est-il déprécié ?

La documentation Java ne semble pas faire mention de la dépréciation de l'option StringTokenizer Pourtant, je continue d'entendre dire qu'il a été déprécié il y a longtemps. Était-il déprécié parce qu'il comportait des bogues/erreurs, ou est-il String.split() tout simplement meilleure à utiliser dans l'ensemble ?

J'ai un code qui utilise StringTokenizer et je me demande si je dois sérieusement me préoccuper de le refactorer pour utiliser String.split() ou si la dépréciation est purement une question de commodité et que mon code est sûr.

83voto

nicholas.hauschild Points 21796
  1. Tokeniseur de chaîne Java 10 -- non déprécié
  2. Tokeniseur de chaîne Java 9 -- non déprécié
  3. Tokeniseur de chaîne Java 8 -- non déprécié
  4. Tokeniseur de chaîne Java 7 -- non déprécié
  5. Tokeniseur de chaîne Java 6 -- non déprécié
  6. Tokeniseur de chaîne Java 5 -- non déprécié

S'il n'est pas marqué comme obsolète, il ne disparaîtra pas.

63voto

Jason S Points 58434

D'après la javadoc de StringTokenizer :

StringTokenizer est une ancienne classe 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 méthode split de String ou le paquet java.util.regex à la place.

Si vous regardez String.split() et le comparer à StringTokenizer la différence pertinente est que String.split() utilise une expression régulière, tandis que StringTokenizer utilise juste des caractères fractionnés textuels. Donc, si je voulais tokeniser une chaîne de caractères avec une logique plus complexe que des caractères simples (par exemple, diviser sur \r\n ), je ne peux pas utiliser StringTokenizer mais je peux utiliser String.split() .

1voto

cruiserupce Points 1

Il y a un problème avec StringTokenize ...

Split doit utiliser regex, StringTokenizer utilise String ou CharSequence,

mais

"a.b..".split(".") retournera {"a","b",""}

et StringTokenizer de "a.b.." ... retournera seulement {"a", "b"}

Et c'est très délicat ! !! Soyez prudent ! !!

Des alternatives meilleures et plus sûres à StringTokenizer sont :

Beaucoup mieux StrongTokenizer est en org.apache.common.lang3 ... il a beaucoup plus de flexibilité ou

com.google.common.base.Splitter

0voto

Andrey Krot Points 64

Je ne pense pas que la raison en soit la méthode String.split, car split est une méthode lente pour analyser la chaîne de caractères - elle compile un motif à l'intérieur.

StringTokenizer peut simplement être remplacé par une classe plus fonctionnelle comme java.util.Scanner ou vous pouvez utiliser le pattern matcher pour obtenir les groupes par regexp.

-2voto

Ali Points 5091

Personnellement, je pense que StringTokenizer a été déprécié parce que c'était simplement une façon complexe de faire quelque chose d'assez simple. StringTokenizer, comme son nom l'indique, ne s'appliquait qu'aux chaînes de caractères, alors pourquoi ne pas en faire une méthode dans String ? De plus StringTokenizer ne supportait pas RegularExpression ne supporte pas les expressions régulières qui sont devenues extrêmement courantes à la fin des années 90 et au début des années 00, ce qui le rendait pratiquement inutile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X