Разница между использованием StringTokenizer и String.split()?

Я использовал String[] split(String) класса String для разделения любой строки для определенного разделителя, и он работал нормально.

Однако теперь ожидается, что он повторит ту же логику с помощью StringTokenizer. Но каковы различия и преимущества использования одного над другим.

Кроме того, я считаю, что String[], возвращаемый split() в одном вызове, является очень эффективным вариантом, чем использование объектов класса StringTokenizer.

Ответ 1

- > String.split() и Pattern.split() дают вам простой синтаксис для выполнения последнего, но, по сути, все, что они делают. Если вы хотите проанализировать полученные строки или изменить разделитель на полпути в зависимости от конкретного токена, они не помогут вам в этом.

- > StringTokenizer является еще более ограничивающим, чем String.split(), а также немного запутанным для использования. Он по существу предназначен для вытягивания жетонов, ограниченных фиксированными подстроками. Из-за этого ограничения он примерно в два раза быстрее, чем String.split(). (См. сравнение String.split() и StringTokenizer.) Он также предшествует API регулярных выражений, частью которого является String.split().

В моих таймингах вы отметите, что String.split() может по-прежнему выделять тысячи строк за несколько миллисекунд на обычной машине. Кроме того, у него есть преимущество перед StringTokenizer, что он дает вам результат как строковый массив, который обычно вы хотите. Использование Enumeration, как предусмотрено StringTokenizer, в большинстве случаев слишком синтаксически суетливое. С этой точки зрения, StringTokenizer сейчас немного пустая трата пространства, и вы можете просто использовать String.split().

Ответ с этой ссылкой

Ответ 2

Взгляните на JavaDocs

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

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

 String[] result = "this is a test".split("\\s");
 for (int x=0; x<result.length; x++)
     System.out.println(result[x]);

Ответ 3

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

Ответ 4

Прочитайте this

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

Ответ 5

У меня есть следующая программа,

Строка "x" - это вкладка, разделенная 12s34;

    public class Testoken {
        public static void main(String[] args) {
            String x = "1   2   s       3           4   ";
            StringTokenizer st = new StringTokenizer(x,"\t");
            int i = 0;
            while(st.hasMoreTokens()){
                System.out.println("token-->"+st.nextToken());            
                i++;
            }
            System.out.println("i-->"+i);//elements from tokenizer
            String [] a = x.split("\t");
            System.out.println("length--->"+a.length);
            for(int y = 0;y<a.length;y++){
            System.out.println("value-->"+a[y]);//elements from split
            }
        }
    }   





Output: 

token-->1 
token-->2 
token-->s 
token-->3 
token-->4 
i-->5 
length--->8 
value-->1 
value-->2 
value-->s 
value--> 
value-->3 
value--> 
value--> 
value-->4

Ответ 6

http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html говорят:

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

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