Por que o StringTokenizer está obsoleto?

A documentação do Java não parece mencionar nada sobre desaprovação para o StringTokenizer , mas continuo ouvindo sobre como ele foi obsoleto há muito tempo. Foi depreciado porque tinha erros / erros, ou é String.split() simplesmente melhor usar em geral?

Eu tenho algum código que usa StringTokenizer e estou querendo saber se eu deveria estar seriamente preocupado sobre como String.split() lo para usar String.split() , ou se a depreciação é puramente uma questão de conveniência e meu código é seguro.

Do javadoc para StringTokenizer :

StringTokenizer é uma class herdada que é retida por motivos de compatibilidade, embora seu uso seja desencorajado em um novo código. Recomenda-se que qualquer pessoa que busque essa funcionalidade use o método split de String ou o pacote java.util.regex.

Se você observar String.split() e compará-la a StringTokenizer , a diferença relevante é que String.split() usa uma expressão regular, enquanto StringTokenizer apenas usa caracteres divididos textualmente. Então, se eu quisesse tokenizar uma string com lógica mais complexa do que caracteres simples (por exemplo, dividir em \r\n ), eu não posso usar StringTokenizer mas eu posso usar String.split() .

  1. Tokenizador de Cadeia do Java 10 – não obsoleto
  2. Tokenizer de Cadeia Java 9 – não preterido
  3. Tokenizer de Cadeia do Java 8 – não preterido
  4. Tokenizer de Cadeia Java 7 – não preterido
  5. Tokenizer de Cadeia Java 6 – não obsoleto
  6. Tokenizer de Cadeia Java 5 – não obsoleto

Se não estiver marcado como reprovado, não será eliminado.

O StringTokenizer não está obsoleto, de fato, o StringTokenizer é 4x mais rápido que o String.split () e na programação competitiva é usado por muitos desenvolvedores.

Fonte: – Entrada mais rápida para Java

Há um problema com o StringTokenize …

Split tem que usar regex, StringTokenizer está usando String ou CharSequence,

mas

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

e StringTokenizer de “ab”. … retornará apenas {“a”, “b”}

E isso é muito complicado !!! Cuidado!!!

Alternativas melhores e mais seguras para o StringTokenizer são:

Muito melhor StrongTokenizer está em org.apache.common.lang3 … tem muito mais flexibilidade ou

com.google.common.base.Splitter

Eu não acho que a razão disso é o método String.split, porque dividir é uma maneira lenta de analisar a string – ela compila um padrão dentro dela.

O StringTokenizer só pode ser substituído por classs mais funcionais, como o java.util.Scanner, ou você pode usar o correspondente de padrões para obter os grupos pelo regexp.

  1. O StringTokenizer não está obsoleto

  2. É pouco diferente function e saída …

Por exemplo, se você tiver "aaa.aa.aa" e quiser dividi-lo nas partes "aaa" , "aa" e "a" , você pode escrever:

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

Se você acabou de usar:

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

Ele retorna uma matriz vazia , porque corresponde a expressões regulares onde . é um personagem espacial. Então você tem que fugir disso:

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

Então, basicamente .. dividir permitir que você use regex … pode ser muito útil

Mas StringTokenizer analisar texto por tokens … e token pode ser mesmo caractere especial

StringTokenizer é uma class herdada que é retida por motivos de compatibilidade, embora seu uso seja desencorajado em um novo código. Recomenda-se que qualquer pessoa que busque essa funcionalidade use o método split de String ou o pacote java.util.regex.

O exemplo a seguir mostra como o método String.split () pode ser usado para dividir uma string em seus tokens básicos:

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

Pessoalmente, sinto que o StringTokenizer foi preterido porque era simplesmente uma maneira complexa de fazer algo bem simples. StringTokenizer como o nome implica apenas aplicado a Strings então porque não apenas fez um método em String. Além disso, o StringTokenizer não suportava RegularExpression não suporta expressões regulares que se tornaram extremamente comuns no final dos anos 90 e início dos anos 00, tornando-o praticamente inútil.

Intereting Posts