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


93

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

Я погуглив за те саме, але не задоволений результатами. Будь-хто знайде хороше рішення для моєї проблеми, буде оцінений.

Наприклад:

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.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
Спіль дійсно використовує регулярний вираз (у 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
Arnaud Denoyelle

Гаразд, після вашої редакції, я бачу, що цей клас походить із зовнішньої бібліотеки
Арно Денойель

... що це Appache Commons (я здогадуюсь): StringUtils
крихкий


4

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


1
Усі посилання дійсні, крім Гуави, оскільки минуло 3 роки, і вони перейшли на GitHub. Я оновив коментар новими посиланнями.
Іван Шарамет

0

якщо ви говорите про це у посиланні на String Class. щоб ви могли використовувати

subString / split

для вибуху та використання рядка

сполучити

для Implode.


1
concateне є еквівалентом implode.
Річард,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.