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]

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

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.


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.


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 .


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.


1
concatenie jest równoważne implode.
Richard
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.