[Duvida] Sobre Vetor de inteiros

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.

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.

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

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[] ).

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

[code]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;
} [/code]

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[]