Odpowiednik Java do Explode and Implode (PHP) [zamknięte]

93

Jestem nowy w Javie, chociaż miałem dobre doświadczenie w PHP i szukam idealnego zamiennika funkcji eksploduj i imploduj (dostępnych w PHP) w Javie.

Wyszukałem w Google to samo, ale nie jestem zadowolony z wyników. Każdy, kto znajdzie dobre rozwiązanie mojego problemu, zostanie doceniony.

Na przykład:

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));

Pożądane wyjście:

[x, y, z]
Pankaj Wanjari
źródło
3
OK, jakie rozwiązania znalazłeś do tej pory?
Konstantin Yovkov
7
dlaczego to pytanie jest odrzucone? i poza tematem? Prosimy o unikanie kolejnych pytań.
Pankaj Wanjari
19
Myślę, że biorąc pod uwagę liczbę wyświetleń, to pytanie wcale nie jest takie złe. Zgadzam się, że to dziwne pytanie, ale wielu z nas, programistów PHP, po prostu wyszukuje w wyszukiwarce java i otrzymuje to jako poprawną odpowiedź.
gorgi93
6
Teraz jest listopad 2014 roku i wyszukałem w Google ciąg znaków eksplozji, a to pytanie nadal było najlepszym wynikiem. Myślę, że status „zamknięty jako niezwiązany z tematem” powinien zostać zniesiony, ponieważ dla mnie to wcale nie jest poza tematem.
Chen Li Yong
3
Luty 2016, to pytanie jest głównym wynikiem zapytania „java explode”.
nieokreślony

Odpowiedzi:

139

Javadoc dla String ujawnia, że String.split()jest to, czego szukasz w odniesieniu do explode.

Java nie zawiera odpowiednika „implode” lub „join”. Zamiast włączać gigantyczną zależność zewnętrzną dla prostej funkcji, jak sugerują inne odpowiedzi, możesz po prostu napisać kilka wierszy kodu. Można to osiągnąć na wiele sposobów; używanie StringBuilderto jeden:

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();
Brian Roach
źródło
Dziękuję wam za wszystkie odpowiedzi.
Pankaj Wanjari
1
Split rzeczywiście używa wyrażenia regularnego (w PHP, Perl, Java itp.). Jeśli chcesz podzielić na inny symbol, musisz go zmienić, na przykład: String [] split = foo.split ("\\ (");
HoldOffHunger
2
Zauważ, że od wersji Java 8 faktycznie mamy String#join( dokumentację ). Na swoim przykładzie: String joined = String.join(" ", split);. Metoda wykorzystuje StringJoinerklasę.
Zabuzard
24

String.split() może zapewnić zamiennik explode()

Przez zastąpienie implode()Chciałbym porad można napisać zarówno funkcję niestandardową lub użyć Apache Commons „s StringUtils.join()funkcje.

Menno
źródło
16

Dobrą alternatywą są metody String.split i StringUtils.join.

Rozbij:

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

Implode:

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

Pamiętaj jednak, że StringUtils znajduje się w zewnętrznej bibliotece.

EnKrypt
źródło
1
Gdzie znajdziesz StringUtils? Znalazłem tę klasę w com.sun.internal i com.sun.deploy, ale nie sądzę, aby dobrym pomysłem było bezpośrednie używanie klas pod 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
Ok, po twojej edycji widzę, że ta klasa pochodzi z zewnętrznej biblioteki
Arnaud Denoyelle
... czyli Appache Commons (chyba): StringUtils
crusy
4

Nie znam PHP, ale myślę, że String.split jest odpowiednikiem PHP w Javie explode. Jeśli chodzi o implodestandardową bibliotekę, nie zapewnia takiej funkcjonalności. Po prostu iterujesz po swojej tablicy i tworzysz ciąg znaków za pomocą StringBuilder / StringBuffer . Możesz też wypróbować doskonałe Google Guava Splitter i Joiner lub split/joinmetody z Apache Commons StringUtils .

Ivan Sharamet
źródło
1
Wszystkie linki są ważne z wyjątkiem Guavy, ponieważ minęły 3 lata i przeniosły się na GitHub. Zaktualizowałem komentarz o nowe linki.
Ivan Sharamet
0

jeśli mówisz o odwołaniu do klasy String. więc możesz użyć

subString / split

dla opcji Rozbij i użyj ciągu

konkrety

dla Implode.

Saunik Singh
źródło
1
concatenie jest równoważne implode.
Richard