Como evitar que um um array de string começe por um indice vazio no retorno do split()

Ola pessoal,

Estou com um problema a dias. Nao consigo manipular direito o retorno de metodo .split() da classe String, quando um arquivo ou String tem varias linhas,

Nesse exemplo abaixo, apenas com um .trim(); na string (onde comentei pra facilitar a leitura), antes de passar pro buffer já resolveu o problema, e o array foi preenchido certinho desde o indice 0:

[code]import java.io.IOException;

public class ExecucaoSistema {
public static void main(String[] args) {
InversaoDeFrases i1=new InversaoDeFrases();
String str="";
try {
str=i1.lerArquivoTexto();
System.out.println(“arquivo lido com sucesso.”);
} catch (IOException e) {
e.printStackTrace();
}
String[] frases=i1.separarFrases(str);
for (int s = 0; s < frases.length; s++) {
System.out.println("frase indice “+s+” "+frases[s]);
}

}

}[/code]

[code]import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.Stack;

public class InversaoDeFrases {
private Scanner teclado;

public InversaoDeFrases(){
	teclado=new Scanner(System.in);
}

public String lerArquivoTexto() throws IOException{
	System.out.println("Insira o caminho completo do arquivo: ");
	String caminho=teclado.nextLine();
	File file=new File(caminho);
	String texto="";
	FileReader fileReader=new FileReader(file);
	BufferedReader leitor=new BufferedReader(fileReader);
	while(leitor.ready()){
			texto+="\n" + leitor.readLine();
		}
	return texto;
}

public String[] separarFrases(String texto){
	/*
	 * <----------AQUI!!!!------------------>
	 */
	texto=texto.trim();
	String[] buffer=texto.split("\n");
	return buffer;

	/*
	 * <----------AQUI!!!!------------------>
	 */

//tem mais codigo, mas não tem relação com a duvida
[/code]

Saida do main ficou assim:

[color=cyan]Insira o caminho completo do arquivo:
C:\Users\usuario\Documents\guj\frases.txt
arquivo lido com sucesso.
frase indice 0 Vamos passear no bosque.
frase indice 1 O sol está radiante.
frase indice 2 Até logo.[/color]

OBS: Conteudo do arquivo de texto (frases.txt) usado pra leitura:

“Vamos passear no bosque.
O sol está radiante.
Até logo.”

Mas fazendo exatamente a mesma coisa em outra classe, o buffer pula o indice 0, quando pega o retorno do split()

[code]public class ArrayString {
public static void main(String[] args) {

	String str="megazord";
	str=str.trim();
	str=str.replaceAll("\n", ""); //JA TENTEI SEM REPLACE TBM, ELE ESTA AQUI APENAS PRA ILUSTRAR
	String[] buffer=str.split("");
	for (int i = 0; i < buffer.length; i++) {
		System.out.println("buffer indice "+i+" "+buffer[i]);
	}
}

}
[/code]

Saída:

[color=red]buffer indice 0[/color] <---- aqui ta o problema[color=red]
buffer indice 1 m
buffer indice 2 e
buffer indice 3 g
buffer indice 4 a
buffer indice 5 z
buffer indice 6 o
buffer indice 7 r
buffer indice 8 d[/color]

Eu ja tentei usar o replaceAll("\n",""), replaceAll("",""), mas nao deu nenhum resultado

Afinal o que estou fazendo errado, ou como é a maneira correta de usar um retorno do metodo split sem dar esses espaços??

Acho estranho porque na primeira classe que citei funciona, mas nas outras 10 diferentes que tentei fazer a mesma coisa usando o trim(), o indice 0 sempre fica vazio, nao consigo entender onde esta a diferença da primeira pra segunda classe pra evitar isso

Fazendo umas gambiarra, eu até consigo ajeitar o array, mas em classes maiores esta me dando um retrabalho danado, porque ae tenho que ficar criando um monte de for com logica diferente

e o problema maior é que isso sera materia de prova escrita, ae nao terei como fazer gambiarra :frowning: hehe

Obrigado!

cara faz um teste ai.
coloca a quebra de linha depois.

de:

while(leitor.ready()){  
                texto+="\n" + leitor.readLine();  
            } 

para:

while(leitor.ready()){  
                texto+= leitor.readLine()+ "\n";  
            }