[Duvida] Sobre Vetor de inteiros

4 respostas
InsaneChess

Prezados, bom dia.
A minha dúvida é sobre o Vetor String[] abaixo.
O código é um exemplo de um livro. Porém gostaria de saber como o vetor está recebendo as strings sem ter sido inicializado?

Ele não deveria ser inicializado como algo do tipo: String[] separador = new String[10] ou String[] separador = {“One”,“Two”,“Three”}?
Como ele consegue funcionar normalmente assim, simplesmente desse jeito"String[] separador = Token.split("/");"…qual a lógica? hehe

public void addSong() throws Exception{
    File file = new File("Mybox.txt");	
	FileReader leitor = new FileReader(file);
	BufferedReader buffer = new BufferedReader(leitor);
	String Token;
	   while((Token = buffer.readLine()) != null){
		String[] separador = Token.split("/");
		songList.add(separador[0]);
	   }
    }

Abraço a todos,
Uma ótima semana.

4 Respostas

luiz.portnoy

A classe String possui um método split(), que, passado um delimitador, retorna um array de Strings.
Ex.:

String dataHoje = "20/09/2010"

String[] separador = dataHoje.split("/");

se você iterar sobre o array separador, vai obter :
posição 0 = 20
posição 1 = 09
posição 2 = 2010

Espero ter ajudado.

InsaneChess

Hum…Então é o próprio método split que determina o tamanho do indice do vetor?

E

Mais ou menos.

Há um overload do método split que permite indicar o tamanho máximo desse array, caso desejado.

De modo geral, o método split cria um array e o dimensiona conforme necessário.

(Olhando o fonte de java.lang.String.split, vê-se que ele chama java.util.Pattern.split. Esse método, por sua vez, simplesmente cria um ArrayList e depois de fazer tudo que é necessário, converte esse ArrayList em um String[] ).

ViniGodoy
InsaneChess:
Hum...Então é o próprio método split que determina o tamanho do indice do vetor?

Sim. Você pode imaginar uma implementação rudimentaríssima de um método split assim:

public String[] split(String token) {
   String teste = this;
   int tokenCount = 0;
   int indice = teste.indexOf(token);
   while (indice != -1) {
       tokenCount++;
       teste = teste.substring(indice+1);
       int indice = teste.indexOf(token);
    }

   String[] tokens = new String[tokenCount+1];
   int indice = teste.indexOf(token);
   int tokenCount = 0;
   while (indice != -1) {
       tokens[tokenCount] = teste.substring(indice+1);
       tokenCount++;
       int indice = teste.indexOf(token);
    }
    tokens[tokenCount] = teste;
    return tokens;
}

PS: Essa é uma implementação tosquíssima, de baixa performance e que não trabalha com Regex. A do split certamente é muito mais inteligente que isso.
Mas note que aí no meio, cedo ou tarde, houve um new em String[]

Criado 20 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 4
Participantes 4