Manipulação de Strings

Srs,

Poder ser simples, mas estou com dificuldade em converter um vetor para um String, sendo que ela não contenha o ultimo tab \t…

[code]

/**
 * Método converteVetorString: Este método converte um vet[] de inteiros,
 * para uma String separa por tab \t.
 * 
 * @param vet[]
 *            int
 * @return String
 */
public static String converteVetorString(int[] vet) {
	String retorno = "";
	for (int i = 0; i < vet.length; i++) {
		retorno += vet[i] + "\t";
	}
	return retorno;
}[/code]

Agradeço a todos.

Trajano

tenta assim:

retorno += (vet[i] + "\t");   

do jeito que vc fez esta acontecendo o seguinte

retorno = retorno + vet[i] + “\t”

Boa tarde!

Corrigi seu javadoc (para usar o estilo recomendado pela Sun) e sua rotina.

Veja que o javadoc não é feito para ser lido diretamente pelo programador; é feito para ser lido pelo programa
javadoc do JDK, para produzir uma saída parecida com o Javadoc da API do Java.

Portanto você NÃO inclui:

  • O nome da rotina (já está na própria definição do método);
  • O tipo dos parâmetros (já está na própria definição do método);
  • O tipo de retorno (já está na própria definição do método);
    Você deve incluir:
  • Para que serve a rotina, ou no mínimo o que ela faz (“como ela faz” normalmente pode ser inferido do código, a menos que você use algum algoritmo específico e complexo).
    O que é muito legal você incluir, embora não seja obrigatório:
  • Um exemplo de uso.
    /**
     * Converte um vetor de inteiros para uma string com os números 
     * separados por tabs. 
     * <p> Exemplo:  {13,45,98} -> "13\t45\t98"
     * @param vet um vetor de inteiros.
     * @return Uma string com os inteiros, separados por tabs.
     */
    public static String converteVetorString(int[] vet) {
        StringBuffer retorno = new StringBuffer(); // prefira usar StringBuffer ou StringBuilder
        // Pensando "ao contrário..."
        if (vet.length >= 1) {
            retorno.append (vet[0]);
        }
        for (int i = 1; i < vet.length; i++) {
            retorno.append ("\t").append (vet[i]);
        }
        return retorno.toString();
    }

Olá conectionsp

Tente o seguinte:

retorno += (String)vet[i] + "\t";

Abraços

Uma vez eu fui tentar criar uma string usando “+=”.
Detalhe: era um programa muito parecido com o seu, só que o array tinha 1 milhão de inteiros - não é nada absurdo em Java.
Eu comecei usando o jeitinho que você fez, só que a máquina simplesmente pediu água.
Quando eu usei o StringBuffer (modernamente você usaria StringBuilder), a criação da string foi virtualmente instantânea.

Agradeço a todos pela colaboração …

Dando um exemplo extremo da diferença do uso de StringBuffer (ou StringBuilder) e o "+=".

Veja que com StringBuffer conseguimos concatenar o milhão de números em cerca de 0,5 segundo.

Na minha máquina não tive paciência de ver se usando só String funcionava mesmo.

import java.util.*;

class TesteStringBuilder {
    int[] valores = new int [1000000];
    public void setup() {
        Random r = new Random();
        r.setSeed (1); // isto faz com que gere sempre a mesma seqüência
        for (int i = 0; i < valores.length; ++i) {
            valores[i] = r.nextInt();
        }
    }
    public void teste1() {
        Timer tm = new Timer();
        final long t = System.currentTimeMillis();
        tm.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                System.out.printf ("%7d ms - %10d\r", System.currentTimeMillis() - t, cnt);
            }
        }, 0, 100);
        String ret = "";
        for (int i = 0; i < valores.length; ++i) {
            ret += valores[i] + "\t";
            cnt = i;
        }
        System.out.println();
        System.out.println ("O teste 1 levou " + (System.currentTimeMillis() - t) + "ms");
        tm.cancel();
    }
    private volatile int cnt;
    public void teste2() {
        Timer tm = new Timer();
        final long t = System.currentTimeMillis();
        tm.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                System.out.printf ("%7d ms - %10d\r", System.currentTimeMillis() - t, cnt);
            }
        }, 0, 100);
        StringBuffer sb = new StringBuffer ();
        for (int i = 0; i < valores.length; ++i) {
            sb.append(valores[i]).append("\t");
            cnt = i;
        }
        String ret = sb.toString();
        System.out.println();
        System.out.println ("O teste 2 levou " + (System.currentTimeMillis() - t) + "ms");
        tm.cancel();
    }
    public static void main(String[] args) {
        TesteStringBuilder tsb = new TesteStringBuilder ();
        tsb.setup();
        tsb.teste2();
        tsb.teste1();
    }
}

thingol, valeu… foi útil pra mim seu código :smiley: