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 hehe
Obrigado!