2013-05-27 8 views
75

Sono nuovo in Java, sebbene abbia avuto una buona esperienza in PHP, e cerco la perfetta sostituzione delle funzioni di esplosione e implode (disponibile in PHP) in Java.Explode e Implode (proprio come PHP) in Java

Ho cercato su Google lo stesso ma non soddisfatto dei risultati. Qualcuno ha la buona soluzione per il mio problema sarà apprezzato.

Ad esempio:

String s = "x,y,z"; 
array a = javaExplode(',',s); //what is javaExplode?? 
System.out.println(Arrays.toString(a)); 

output desiderato:

[x, y, z] 
+3

OK, quali soluzioni hai trovato finora? –

+0

Questo è praticamente lo stesso di [Un metodo per annullare l'effetto di java String.split()?] (Http://stackoverflow.com/questions/794248) – PhoneixS

+5

perché questa domanda non è stata votata? e fuori tema ?? Si prega di suggerire di evitare per le prossime domande. –

risposta

115

Il Javadoc for String rivela che String.split() è quello che stai cercando per quanto riguarda explode.

Java non include un "implode" di equivalente "join". Piuttosto che includere una dipendenza esterna gigante per una funzione semplice come suggeriscono le altre risposte, potresti semplicemente voler scrivere un paio di righe di codice.C'è un numero di modi per farlo; utilizzando un StringBuilder è uno:

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

Grazie ragazzi per tutte le vostre risposte. –

+0

Split usa infatti un'espressione regolare (in PHP, Perl, Java, ecc.). Se si desidera dividere su un altro simbolo, è necessario eseguire l'escape, in questo modo: String [] split = foo.split ("\\\ ("); – HoldOffHunger

+0

Si noti che poiché ** Java 8 ** abbiamo effettivamente 'String # join' ([documentation] (https: //docs.oracle.com/javase/9/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence ... -)). Per il tuo esempio: 'String join = String.join (" ", split);'. Il metodo usa la classe 'StringJoiner'. – Zabuza

-1

se si sta parlando nel riferimento della classe String. in modo da poter utilizzare

sottoStringa/split

per Explode & uso String

concate

per implodere.

+1

'concate' non è equivalente a' implode'. – Richard

19

String.split() in grado di fornire un sostituto per explode()

Per la sostituzione di implode() avrei consigliamo di scrivere sia una funzione personalizzata o utilizzare StringUtils.join() funzioni Apache Commons s'.

10

Buone alternative sono i metodi String.split e StringUtils.join.

esplodere:

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

Implode:

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

Occorre tuttavia tenere presente che StringUtils è in una libreria esterna.

+1

Dove trovi StringUtils? Trovo questa classe in com.sun.internal e com.sun.deploy ma non penso che sia una buona idea usare direttamente le classi in pacchetti com.sun 'come sun., Che sono al di fuori della piattaforma Java , può essere diverso tra piattaforme OS (Solaris, Windows, Linux, Macintosh, ecc.) e può cambiare in qualsiasi momento senza preavviso con le versioni dell'SDK –

+0

Ok, dopo la modifica, vedo che questa classe proviene da una lib esterna –

+0

. ..questo è [Appache Commons] (https://commons.apache.org/) (credo): [StringUtils] (https://commons.apache.org/proper/commons-lang/apidocs/org/apache /commons/lang3/StringUtils.html) – crusy

3

Non ho familiarità con PHP, ma penso che String.split sia Java equivalente a PHP explode. Per quanto riguarda implode, la libreria standard non fornisce tale funzionalità. Basta scorrere l'array e creare una stringa usando StringBuilder/StringBuffer. Oppure puoi provare i metodi eccellenti Google GuavaSplitter e Joiner o split/join da Apache CommonsStringUtils.

+0

I collegamenti non funzionano – marbel82

+1

Tutti i collegamenti sono validi ad eccezione di Guava, da 3 anni passati e trasferiti a GitHub. Ho aggiornato il commento con nuovi collegamenti. –