String.split против StringUtils.split в Java дает разные результаты
Рассмотрим строку как ниже с разделителем __|__
,
String str = "a_b__|__c_d";
str.split("__\\|__")
дает 2 раскола a_b и c_dStringUtils.split(str, "__|__") or StringUtils.split(str, "__\\|__")
дает 4 раскола a, b, c, d, что не желательно.
Есть ли способ сделать StringUtils.split(), чтобы дать те же результаты String.split()?
2 ответа
String.split()
имеет очень удивительную семантику, и это редко то, что вы хотите. Вы должны предпочесть StringUtils
(или гуавы Splitter
, обсуждается в предыдущей ссылке).
Ваша конкретная проблема заключается в том, что String.split()
принимает регулярное выражение, в то время как StringUtils.split()
использует каждый символ как отдельный токен. Вы должны использовать StringUtils.splitByWholeSeparator()
разделить на содержимое полной строки.
StringUtils.splitByWholeSeparator(str, "__|__");
Нет, согласно документации, второй параметр StringUtils.split - это список всех символов, которые считаются разделителями. В Apache Commons есть другая функция, которая делает то, что вы хотите - StringUtils.splitByWholeSeparator. Тем не менее, я не понимаю, что не так с простым String.split.