Java: esiste una funzione integrata per concatenare le stringhe in una stringa []?

StackOverflow https://stackoverflow.com/questions/1810954

  •  06-07-2019
  •  | 
  •  

Domanda

O un modo migliore di questo?

String concat(String[] strings) {
  StringBuilder out = new StringBuilder();

  for(String next: strings) {
    out.append(next);
  }

  return out.toString();
}

Nessun problema se no, mi sento come se ci fosse un integrato?

È stato utile?

Soluzione

No, non nella libreria Java corrente.

In JDK7 dovresti essere in grado di scrivere String.join (" " ;, stringhe) . Si è riscontrato che "85%" degli usi per volere un indice nel posh for loop è stato quello di fare un join di stringa (di cui puoi comunque fare a meno).

Immagino che se vuoi essere super efficiente, potresti scriverlo come qualcosa del genere:

public static String concat(String... strs) {
    int size = 0;
    for (String str : strs) {
        size += str.length;
    }

    final char[] cs = new char[size];
    int off = 0;
    try {
        for (String str : strs) {
            int len = str.length();
            str.getChars(0, len, cs, off);
            off += len;
        }
    } catch (ArrayIndexOutOfBoundsException exc) {
        throw new ConcurrentModificationException(exc);
    }
    if (off != cs.length) {
        throw new ConcurrentModificationException();
    }
    return new String(cs);
}

(Non compilato o testato, ovviamente.)

Altri suggerimenti

Dai un'occhiata alle nuove librerie di Google Guava , che incorporeranno Collezioni di Google dopo il passaggio da 1.0RC4 a 1.0. Guava e Collezioni ti danno un po 'di potenza ed eleganza e sono già ampiamente utilizzati nel codice di produzione di Google.

Il Joiner class si adatta perfettamente al tuo esempio:

String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);

Aleksander Stensby ha una bella esplorazione in quattro parti di Guava / Collections.

Come Apache Collections, non fa parte del JDK, sebbene si basi molto attentamente su java.util.collection.

org.apache.commons.lang.StringUtils.join

Seconda raccomandazione di guardare Google Guava.

Le raccolte Google sono state rilasciate la scorsa settimana e questa settimana Guava è stata rilasciata per i test. Le cose di Google Collections sono solide e l'API non cambierà. Preferisco di gran lunga le raccolte di Google rispetto a quella di Apache, in particolare perché è completamente generico. La gente di Google afferma anche che è abbastanza veloce per essere utilizzato in produzione, il che è abbastanza impressionante, anche se non posso verificarlo personalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top