¿Por qué StringTokenizer está en desuso?

La documentación de Java no parece mencionar nada sobre la desaprobación de StringTokenizer , pero sigo escuchando cómo fue desaprobada hace mucho tiempo. ¿Fue obsoleto porque tenía errores / errores, o String.split() simplemente es mejor usarlo en general?

Tengo un código que usa StringTokenizer y me pregunto si debería preocuparme seriamente sobre la String.split() para usar String.split() , o si la degradación es puramente una cuestión de conveniencia y mi código es seguro.

Del javadoc para StringTokenizer :

StringTokenizer es una clase heredada que se conserva por razones de compatibilidad, aunque se desaconseja su uso en el nuevo código. Se recomienda que cualquiera que busque esta funcionalidad use el método de división de String o el paquete java.util.regex en su lugar.

Si observa String.split() y lo compara con StringTokenizer , la diferencia relevante es que String.split() utiliza una expresión regular, mientras que StringTokenizer solo usa caracteres divididos al pie de la letra. Por lo tanto, si quería convertir una cadena con una lógica más compleja que los caracteres individuales (por ejemplo, dividir en \r\n ), no puedo usar StringTokenizer pero puedo usar String.split() .

  1. Tokenizador de cadenas Java 10 : no obsoleto
  2. Tokenizador de cadenas Java 9 : no obsoleto
  3. Java 8 String Tokenizer : no está en desuso
  4. Java 7 String Tokenizer : no obsoleto
  5. Tokenizador de cadenas Java 6 : no obsoleto
  6. Tokenizador de cadenas Java 5 – no desaprobado

Si no está marcado como obsoleto, no va a desaparecer.

StringTokenizer no está en desuso, de hecho StringTokenizer es 4 veces más rápido que String.split () y en la progtwigción de la competencia es utilizado por muchos desarrolladores.

Fuente: – Entrada más rápida para Java

Hay un problema con StringTokenize …

Split tiene que usar expresiones regulares, StringTokenizer está usando String o CharSequence,

pero

"ab.".split(".") devolverá {"a","b",""}

y StringTokenizer de “ab”. … devolverá solo {“a”, “b”}

¡Y esto es muy complicado! ¡¡¡Ten cuidado!!!

Las alternativas mejores y más seguras a StringTokenizer son:

Mucho mejor StrongTokenizer está en org.apache.common.lang3 … tiene mucha más flexibilidad o

com.google.common.base.Splitter

No creo que el motivo sea el método String.split, porque la división es una forma lenta de analizar la cadena: comstack un patrón dentro.

StringTokenizer solo puede ser reemplazado por una clase más funcional como java.util.Scanner o puede usar Pattern Matcher para obtener los grupos por regexp.

  1. StringTokenizer no está en desuso

  2. Es poco diferente función y salida …

Por ejemplo, si tiene "aaa.aa.aa" y desea dividirlo en partes "aaa" , "aa" y "a" , puede escribir:

 new StringTokenizer("aaa.aa.aa", ".") 

Si solo usas:

 "aaa.aa.aa".split(".") 

Devuelve una matriz vacía , porque coincide con las expresiones regulares donde . es un personaje espacial Entonces tienes que escapar de eso:

 "aaa.aa.aa".split("\\.") 

Así que, básicamente, split te permite usar expresiones regulares … puede ser muy útil

Pero StringTokenizer analiza texto por tokens … y token puede ser incluso un carácter especial

StringTokenizer es una clase heredada que se conserva por razones de compatibilidad, aunque se desaconseja su uso en el nuevo código. Se recomienda que cualquiera que busque esta funcionalidad use el método de división de String o el paquete java.util.regex en su lugar.

El siguiente ejemplo muestra cómo se puede utilizar el método String.split () para dividir una cadena en sus tokens básicos:

  String[] result = "this is a test".split("\\s"); 

Personalmente, creo que StringTokenizer fue desaprobado porque era simplemente una forma compleja de hacer algo bastante simple. StringTokenizer, como su nombre lo indica, solo se aplica a Strings, entonces, ¿por qué no simplemente convertirlo en un método en String? Además StringTokenizer no era compatible con RegularExpression no es compatible con la expresión regular, que se convirtió en extremadamente común a finales de los 90 y principios de los ’00, por lo que resulta prácticamente inútil.