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.

Другие вопросы по тегам