597 Stimmen

Ein schneller und einfacher Weg, Array-Elemente mit einem Trennzeichen zu verbinden (das Gegenteil von Split) in Java

参照 Verwandte .NET-Fragen

Ich suche nach einer schnellen und einfachen Möglichkeit, genau das Gegenteil von Split zu tun zu tun, so dass es zu ["a","b","c"] zu werden "a,b,c"

Das Iterieren durch ein Array erfordert entweder das Hinzufügen einer Bedingung (wenn dies nicht das letzte Element ist, füge das Trennzeichen hinzu) oder die Verwendung von substring, um das letzte Trennzeichen zu entfernen.

Ich bin sicher, es gibt einen zertifizierten, effizienten Weg, dies zu tun (Apache Commons?)

Wie gehen Sie bei Ihren Projekten vor?

6voto

David Hedlund Punkte 125085

6voto

SSpoke Punkte 5453

Diese kleine Funktion ist immer nützlich.

public static String join(String[] strings, int startIndex, String separator) {
    StringBuffer sb = new StringBuffer();
    for (int i=startIndex; i < strings.length; i++) {
        if (i != startIndex) sb.append(separator);
        sb.append(strings[i]);
    }
    return sb.toString();
}

6voto

mnesarco Punkte 2380

Diese Optionen sind schnell und übersichtlich:

  public static String join(String separator, String... values) {
    StringBuilder sb = new StringBuilder(128);
    int end = 0;
    for (String s : values) {
      if (s != null) {
        sb.append(s);
        end = sb.length();
        sb.append(separator);
      }
    }
    return sb.substring(0, end);
  }

3voto

vallismortis Punkte 6584

Der von mir gewählte Ansatz hat sich seit Java 1.0 weiterentwickelt, um die Lesbarkeit zu gewährleisten und vernünftige Optionen für die Abwärtskompatibilität mit älteren Java-Versionen beizubehalten, während gleichzeitig Methodensignaturen bereitgestellt werden, die die von apache commons-lang einfach ersetzen. Aus Leistungsgründen kann ich einige mögliche Einwände gegen die Verwendung von Arrays.asList erkennen, aber ich bevorzuge Hilfsmethoden, die sinnvolle Vorgaben haben, ohne die eine Methode zu duplizieren, die die eigentliche Arbeit ausführt. Dieser Ansatz bietet geeignete Einstiegspunkte für eine zuverlässige Methode, die keine Array/List-Konvertierung vor dem Aufruf erfordert.

Mögliche Varianten für die Java-Versionskompatibilität sind der Austausch von StringBuffer (Java 1.0) gegen StringBuilder (Java 1.5), der Austausch des Java-1.5-Iterators und das Entfernen des generischen Platzhalters (Java 1.5) aus der Collection (Java 1.2). Wenn Sie die Abwärtskompatibilität einen oder zwei Schritte weiter gehen wollen, löschen Sie die Methoden, die Collection verwenden, und verlagern Sie die Logik in die array-basierte Methode.

public static String join(String[] values)
{
    return join(values, ',');
}

public static String join(String[] values, char delimiter)
{
    return join(Arrays.asList(values), String.valueOf(delimiter));
}

// To match Apache commons-lang: StringUtils.join(values, delimiter)
public static String join(String[] values, String delimiter)
{
    return join(Arrays.asList(values), delimiter);
}

public static String join(Collection<?> values)
{
    return join(values, ',');
}

public static String join(Collection<?> values, char delimiter)
{
    return join(values, String.valueOf(delimiter));
}

public static String join(Collection<?> values, String delimiter)
{
    if (values == null)
    {
        return new String();
    }

    StringBuffer strbuf = new StringBuffer();

    boolean first = true;

    for (Object value : values)
    {
        if (!first) { strbuf.append(delimiter); } else { first = false; }
        strbuf.append(value.toString());
    }

    return strbuf.toString();
}

2voto

IvanP Punkte 31
public String join(String[] str, String separator){
    String retval = "";
    for (String s: str){ retval+= separator + s;}
    return retval.replaceFirst(separator, "");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X