Почему StringTokenizer устарел?

Документация Java, кажется, не упоминает ничего об устаревании для StringTokenizerТем не менее, я продолжаю слышать о том, как это давно устарело. Было ли это устаревшим, потому что он имел ошибки / ошибки, или String.split() просто лучше использовать в целом?

У меня есть код, который использует StringTokenizer и мне интересно, если я должен быть серьезно обеспокоен рефакторингом его использовать String.split()или просто ли устаревание является делом удобства и мой код безопасен.

8 ответов

Решение

Из Javadoc для StringTokenizer:

StringTokenizer является устаревшим классом, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функциональность, рекомендуется вместо этого использовать метод split String или пакет java.util.regex.

Если вы посмотрите на String.split() и сравнить это с StringTokenizer соответствующая разница в том, что String.split() использует регулярное выражение, тогда как StringTokenizer просто использует буквально разделенные символы. Так что, если я хотел бы токенизировать строку с более сложной логикой, чем отдельные символы (например, разделить на \r\n) Я не могу использовать StringTokenizer но я могу использовать String.split(),

  1. Java 10 String Tokenizer - не рекомендуется
  2. Java 9 String Tokenizer - не рекомендуется
  3. Java 8 String Tokenizer - не рекомендуется
  4. Java 7 String Tokenizer - не рекомендуется
  5. Java 6 String Tokenizer - не рекомендуется
  6. Java 5 String Tokenizer - не рекомендуется

Если он не помечен как устаревший, он не исчезнет.

StringTokenizer не считается устаревшим, фактически StringTokenizer в 4 раза быстрее, чем String.split(), и в конкурентном программировании его используют многие разработчики.

Источник:- Более быстрый ввод для Java

Существует проблема с StringTokenize...

Сплит должен использовать регулярное выражение, StringTokenizer использует String или CharSequence,

но

"a.b..".split(".") вернусь {"a","b",""}

и StringTokenizer от "ab."... вернет только {"a","b"}

И это очень сложно!!! Будь осторожен!!!

Лучшими и безопасными альтернативами StringTokenizer являются:

Намного лучше StrongTokenizer в org.apache.common.lang3... это гораздо больше гибкости или

com.google.common.base.Splitter

  1. StringTokenizer не считается устаревшим

  2. Это немного другая функция и выход...

Например, если у вас есть "aaa.aa.aa" и хочу разбить его на части "aaa", "aa" а также "a"Вы можете просто написать:

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

Если вы просто используете:

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

Он возвращает пустой массив, потому что он соответствует регулярным выражениям где . это пространственный характер. Таким образом, вы должны избежать этого:

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

Так что в основном.. split позволяет вам использовать регулярные выражения... это может быть очень полезно

Но StringTokenizer разбирает текст по токенам... и токен может быть даже специальным символом

Я не думаю, что причина этого в методе String.split, потому что split - это медленный способ разбора строки - он компилирует шаблон внутри.

StringTokenizer просто может быть заменен более функциональными классами, такими как java.util.Scanner или вы можете использовать шаблонное сопоставление для получения групп с помощью регулярных выражений.

StringTokenizer - это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функциональность, рекомендуется вместо этого использовать метод split String или пакет java.util.regex.

В следующем примере показано, как метод String.split() можно использовать для разбиения строки на ее основные токены:

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

Лично я чувствую, что StringTokenizer устарел, потому что это был просто сложный способ сделать что-то довольно простое. StringTokenizer, как следует из названия, применяется только к Strings, так почему бы просто не сделать его методом в String. Кроме того, StringTokenizer не поддерживает RegularExpression, не поддерживает регулярные выражения, что стало чрезвычайно распространенным явлением в конце 90-х и начале 00-х годов, что делает его практически бесполезным.

Другие вопросы по тегам