Разница между использованием 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.
Итак, я бы сказал, не меняйте его и покажите эту строку человеку, который рекомендовал его рефакторинг. Возможно, у них есть старая информация или еще одна веская причина сказать вам.
Ответ 7
Вот ссылка, отвечая (с моей точки зрения) на вопрос: http://lavnish.blogspot.com/2008/05/stringsplit-vs-stringtokenizer.html