Мне нравится идея StringTokenizer, потому что это является Счетным.
, Но это является также устаревшим, и замена String.split, которые возвращают скучную Строку [] (и не делает включает разделители).
, Таким образом, я реализовал StringTokenizerEx, который является Повторяемым, и который берет истинный regexp для разделения строки.
А истинный regexp означает, что это не 'Последовательность символов', повторенная для формирования разделителя:
'o' будет только соответствовать 'o' и разделять 'ooo' на три разделителя с двумя пустыми строками внутри:
[o], '', [o], '', [o]
, Но regexp o + возвратит ожидаемый результат при разделении "aooob"
[], 'a', [ooo], 'b', []
Для использования этого StringTokenizerEx:
final StringTokenizerEx aStringTokenizerEx = new StringTokenizerEx("boo:and:foo", "o+");
final String firstDelimiter = aStringTokenizerEx.getDelimiter();
for(String aString: aStringTokenizerEx )
{
// uses the split String detected and memorized in 'aString'
final nextDelimiter = aStringTokenizerEx.getDelimiter();
}
код этого класса доступен по телефону Отрывки DZone .
, Как обычно, для проблема кода ответ (один автономный класс с включенными тестовыми сценариями), вставка копии это (в 'src/test' каталоге) и выполняет его . Его основное () метод иллюстрирует различные использования.
Примечание: (в конце редактирования 2009 года)
Последние мысли статьи : Трудный вопрос Java: Крохоборствование делает хорошую работу, объясняя причудливое поведение в String.split()
.
Josh Bloch даже прокомментировал в ответ на ту статью:
Да, это - боль. FWIW, это было сделано на очень серьезном основании: совместимость с Perl.
парнем, который сделал это, является Mike "madbot" McCloskey, который теперь работает с нами в Google. Mike удостоверился, что регулярные выражения Java прошли фактически каждые из 30K тестов регулярного выражения Perl (и работал быстрее).
общая библиотека Google Гуава содержит также Разделитель, который является:
, Таким образом, это может стоящий проверения. От их первоначальная грубая документация (PDF) :
JDK имеет это:
String[] pieces = "foo.bar".split("\\.");
хорошо использовать это, если Вы хотите точно, что это делает: - регулярное выражение - заканчиваются как массив - его способ обработать пустые части
Мини-трудный вопрос: ", a, b", .split ("") возвраты...
(a) "", "a", "", "b", ""
(b) null, "a", null, "b", null
(c) "a", null, "b"
(d) "a", "b"
(e) None of the above
Ответ: (e) Ни одно из вышеупомянутого.
",a,,b,".split(",")
returns
"", "a", "", "b"
Только запаздывающая порожняя тара пропускается! (Кто знает, что обходное решение предотвращает пропуск? Это - забавное...)
В любом случае, наш Разделитель просто более гибок: поведение по умолчанию упрощенно:
Splitter.on(',').split(" foo, ,bar, quux,")
--> [" foo", " ", "bar", " quux", ""]
, Если Вы хотите дополнительные функции, попросите их!
Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split(" foo, ,bar, quux,")
--> ["foo", "bar", "quux"]
Порядок методов конфигурации не имеет значения - во время разделения, обрезка происходит прежде, чем проверить на порожнюю тару.
Two Errors:
You need to access the "href" member of the location object:
window.location.href = http://foo.com
You have invalid JavaScript:
javascript:location = 'http://validator.w3.org/check?uri=' +escape(location)PLUS SIGN AND QUOTE MISSING HERE&doctype=Inline&charset=detect+automatically&ss=1&group=0&user-agent=W3C_Validator/1.654';
I recommend using this:
javascript:(function(){window.location.href='http://validator.w3.org/check?uri='+escape(window.location.href)+'&doctype=Inline&charset=detect+automatically&ss=1&group=0&user-agent=W3C_Validator/1.654';})()