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