Эквивалент Java для Explode and Implode (PHP) [закрыто]


93

Я новичок в Java, хотя у меня был хороший опыт работы с PHP, и я ищу идеальную замену для функций explode и implode (доступных в PHP) в Java.

Я искал то же самое в Google, но не доволен результатами. Мы будем признательны за любое хорошее решение моей проблемы.

Например:

String s = "x,y,z";
//Here I need a function to divide the string into an array based on a character.
array a = javaExplode(',', s);  //What is javaExplode?
System.out.println(Arrays.toString(a));

Желаемый результат:

[x, y, z]

3
Хорошо, какие решения вы уже нашли?
Константин Йовков

7
почему этот вопрос отклонен? а не по теме ?? Пожалуйста, предложите избегать следующих вопросов.
Панкадж Ванджари

19
Я думаю, судя по количеству просмотров, этот вопрос совсем не так уж плох. Я согласен, что это странный вопрос, но многие из нас, программистов PHP, просто гуглили для java explode, а затем получали это как правильный ответ.
gorgi93

6
Сейчас ноябрь 2014 года, и я погуглил, что строка Java взорвалась, и этот вопрос все равно оказался главным результатом. Я считаю, что статус «закрыто как не по теме» нужно снять, так как для меня это совсем не по теме.
Chen Li Yong

3
Февраль 2016, этот вопрос - главный результат для "java explode".
undefined

Ответы:


139

Документ Javadoc для String показывает, чтоString.split() это именно то, что вы ищете explode.

Java не включает эквивалент «взрыва» или «соединения». Вместо того, чтобы включать гигантскую внешнюю зависимость для простой функции, как предлагают другие ответы, вы можете просто написать пару строк кода. Есть несколько способов добиться этого; использование a StringBuilderравно одному:

String foo = "This,that,other";
String[] split = foo.split(",");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++) {
    sb.append(split[i]);
    if (i != split.length - 1) {
        sb.append(" ");
    }
}
String joined = sb.toString();

Спасибо, ребята, за все ваши ответы.
Панкадж Ванджари

1
Split действительно использует регулярное выражение (в PHP, Perl, Java и т. Д.). Если вы хотите разделить другой символ, его нужно экранировать, например: String [] split = foo.split ("\\ (");
HoldOffHunger

2
Обратите внимание, что начиная с Java 8 у нас действительно есть String#join( документация ). Для примера: String joined = String.join(" ", split);. Метод использует StringJoinerкласс.
Забузард

24

String.split() может предоставить вам замену explode()

Для замены implode()я бы посоветовал вам написать либо пользовательскую функцию или использование Apache Commons «ы StringUtils.join()функции.


16

Хорошие альтернативы - методы String.split и StringUtils.join.

Взорваться:

String[] exploded="Hello World".split(" ");

Взрыв:

String imploded=StringUtils.join(new String[] {"Hello", "World"}, " ");

Имейте в виду, что StringUtils находится во внешней библиотеке.


1
Где найти StringUtils? Я нахожу этот класс в com.sun.internal и com.sun.deploy, но я не думаю, что было бы хорошей идеей напрямую использовать классы под com.sunpackages such as sun., that are outside of the Java platform, can be different across OS platforms (Solaris, Windows, Linux, Macintosh, etc.) and can change at any time without notice with SDK versions
Арно Денойель

Хорошо, после вашего редактирования я вижу, что этот класс
взят

... это Appache Commons (я полагаю): StringUtils
crusy


4

Я не знаком с PHP, но думаю, что String.split - это Java-эквивалент PHP explode. Что касается implodeстандартной библиотеки, то такой функциональности нет. Вы просто перебираете свой массив и строите строку с помощью StringBuilder / StringBuffer . Или вы можете попробовать отличный Google Guava Splitter and Joiner или split/joinметоды из Apache Commons StringUtils .


1
Все ссылки действительны, кроме Guava, так как прошло 3 года и они перешли на GitHub. Я обновил комментарий новыми ссылками.
Иван Шарамет

0

если вы говорите в ссылке на String Class. так что вы можете использовать

subString / split

для взрыва и использования строки

объединять

для Implode.


1
concateне эквивалентно implode.
Ричард
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.