Java - há um construído em função de concatenação de Strings em um String []?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Ou uma maneira melhor do que isso?

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

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

  return out.toString();
}

Não se preocupe se não, eu só sinto que deve ser construído em um?

Foi útil?

Solução

Não, não na biblioteca Java atual.

Em JDK7 você deve ser capaz de escrever String.join("", strings). Verificou-se que "85%" dos usos para querer um índice na elegante para o laço era fazer uma string join (que você pode fazer sem qualquer maneira).

Eu acho que se você quer ser uber eficiente, você poderia escrevê-lo como algo como:

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

(Não compilado ou testado, é claro.)

Outras dicas

Dê uma olhada no novo Google Goiaba bibliotecas , que irá incorporar Google Collections uma vez que passa de 1.0RC4 a 1,0. Goiaba e coleções dar-lhe um pouco de poder e elegância, e já são amplamente utilizados no código de produção do Google.

O Joiner ternos classe o seu exemplo perfeitamente:

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

Aleksander Stensby tem um bom quatro partes exploração de goiaba / Collections.

como o Apache coleções, não é parte do JDK, embora ele constrói com muito cuidado em cima de java.util.Collection.

org.apache.commons.lang.StringUtils.join

Segundo recomendação para olhada no Google Guava.

Os Google Collections foi lançado na semana passada, e esta semana, goiaba foi lançado para testes. O material do Google Collections é sólida e a API não vai mudar. Eu prefiro muito mais do Google Collections sobre o apache, especificamente porque o seu totalmente genérico. O pessoal do Google também afirmam que o seu rápido o suficiente para que eles utilizam na produção, que é bastante impressionante, altho não posso verificar isso pessoalmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top