Java entspricht Explode and Implode (PHP) [geschlossen]

93

Ich bin neu in Java, habe aber gute Erfahrungen mit PHP gemacht und suche nach einem perfekten Ersatz für Explodierungs- und Implodierungsfunktionen (verfügbar in PHP) in Java.

Ich habe gleich gegoogelt, bin aber mit den Ergebnissen nicht zufrieden. Jeder, der die gute Lösung für mein Problem hat, wird geschätzt.

Beispielsweise:

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

Gewünschte Ausgabe:

[x, y, z]
Pankaj Wanjari
quelle
3
OK, welche Lösungen haben Sie bisher gefunden?
Konstantin Yovkov
7
Warum wird diese Frage abgelehnt? und off topic ?? Bitte schlagen Sie vor, für die nächsten Fragen zu vermeiden.
Pankaj Wanjari
19
Ich denke, basierend auf der Anzahl der Aufrufe ist diese Frage gar nicht so schlecht. Ich bin damit einverstanden, dass es eine seltsame Frage ist, aber viele von uns PHP-Programmierern googeln einfach nach Java Explode und erhalten dies als richtige Antwort.
Gorgi93
6
Jetzt ist November 2014 und ich habe gegoogelt, dass Java-Strings explodieren, und diese Frage kam immer noch als Top-Ergebnis heraus. Ich denke, der Status "als nicht zum Thema geschlossen" sollte aufgehoben werden, da dies für mich überhaupt kein Thema ist.
Chen Li Yong
3
Februar 2016 ist diese Frage das Hauptergebnis für "Java Explode".
undefiniert

Antworten:

139

Das Javadoc für String zeigt, dass String.split()Sie genau danach suchen explode.

Java enthält kein "implode" von "join" -Äquivalent. Anstatt eine riesige externe Abhängigkeit für eine einfache Funktion einzuschließen, wie die anderen Antworten vermuten lassen, möchten Sie möglicherweise nur ein paar Codezeilen schreiben. Es gibt eine Reihe von Möglichkeiten, dies zu erreichen. mit a StringBuilderist eins:

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
quelle
Vielen Dank für all eure Antworten.
Pankaj Wanjari
1
Split verwendet in der Tat einen regulären Ausdruck (in PHP, Perl, Java usw.). Wenn Sie ein anderes Symbol teilen möchten, muss es wie folgt maskiert werden: String [] split = foo.split ("\\ (");
HoldOffHunger
2
Beachten Sie, dass wir seit Java 8 tatsächlich String#join( Dokumentation ) haben. Für Ihr Beispiel : String joined = String.join(" ", split);. Die Methode verwendet die StringJoinerKlasse.
Zabuzard
24

String.split() kann Ihnen einen Ersatz für explode()

Als Ersatz für implode()würde ich Ihnen raten, entweder eine benutzerdefinierte Funktion zu schreiben oder die Funktionen von Apache Commons zu StringUtils.join()verwenden.

Menno
quelle
16

Gute Alternativen sind die Methoden String.split und StringUtils.join.

Explodieren:

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

Implodieren:

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

Beachten Sie jedoch, dass sich StringUtils in einer externen Bibliothek befindet.

Verschlüsseln
quelle
1
Wo finden Sie StringUtils? Ich finde diese Klasse in com.sun.internal und com.sun.deploy, aber ich denke nicht, dass es eine gute Idee ist, Klassen direkt unter 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, nach Ihrer Bearbeitung sehe ich, dass diese Klasse aus einer externen
Arnaud Denoyelle
... das ist Appache Commons (ich denke): StringUtils
Crusy
4

Ich bin nicht mit PHP vertraut, aber ich denke, String.split ist Java-Äquivalent zu PHP explode. Die implodeStandardbibliothek bietet keine solche Funktionalität. Sie iterieren einfach über Ihr Array und erstellen einen String mit StringBuilder / StringBuffer . Oder Sie können exzellenten Google Guava Splitter und Joiner oder split/joinMethoden von Apache Commons StringUtils ausprobieren .

Ivan Sharamet
quelle
1
Alle Links außer Guava sind gültig, da 3 Jahre vergangen sind und sie zu GitHub verschoben wurden. Ich habe den Kommentar mit neuen Links aktualisiert.
Ivan Sharamet
0

wenn Sie in der Referenz von String Class sprechen. so können Sie verwenden

SubString / Split

für Explode & use String

prägnant

für Implode.

Saunik Singh
quelle
1
concateist nicht gleichbedeutend mit implode.
Richard