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

1 resposta
E

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:

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]);
		}
		
	}
}
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

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()

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]);
		}
	}
}

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 :( hehe

Obrigado!

1 Resposta

ssh

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";  
            }
Criado 22 de outubro de 2011
Ultima resposta 22 de out. de 2011
Respostas 1
Participantes 2