Если у вас есть этот код:
"......".Split(new String[]{"...", ".."}, StringSplitOptions.None);
Результирующие элементы массива:
1. ""
2. ""
3. ""
Теперь, если вы измените порядок разделителей,
"......".Split(new String[]{"..", "..."}, StringSplitOptions.None);
Результирующие элементы массива:
1. ""
2. ""
3. ""
4. ""
Из этих двух примеров я склонен заключить, что метод Split рекурсивно токенизирует по мере прохождения каждого элемента массива слева направо.
Однако, как только мы добавим в уравнение разделители, содержащие буквенно-цифровые символы, станет ясно, что приведенная выше теория неверна.
"5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None)
результат: 1. "5" 2. ".7"
"5.x.7".Split(new String[]{"x.", ".x"}, StringSplitOptions.None)
результат: 1. "5" 2. ".7"
На этот раз мы получаем тот же результат, что означает, что правило, теоретизированное на основе первого набора примеров, больше не применяется. (то есть: если бы приоритет разделителя всегда определялся на основе положения разделителя в массиве, то в последнем примере мы бы получили "5."
и "7"
вместо "5"
и ".7"
.
Что касается того, почему я трачу свое время, пытаясь угадать, как работает стандартный API .NET, это потому, что я хочу реализовать аналогичную функциональность для своих java-приложений, но ни StringTokenizer, ни org.apache.commons.lang.StringUtils не предоставляют возможность разделить Строка с использованием нескольких многосимвольных разделителей (и даже если бы я нашел API, предоставляющий эту возможность, было бы трудно понять, всегда ли он выполняет токенизацию с использованием того же алгоритма, что и String.Split метод.
String#split
в Java принимает регулярное выражение в качестве критерия разделения. Таким образом, вы можете объединить столько критериев разделения, используяpipe(|)
. Кроме того, было бы лучше, если бы вы могли опубликовать реальную проблему здесь, а не эквивалентный код на другом языке. Не все люди знают несколько языков. - person Rohit Jain   schedule 08.02.2013