AsusFx
Janeiro 7, 2009, 10:33am
#1
Opa, pessoal estou com um probleminha. Estou manipulando um arquivo *.txt e estou usando a função split para guardar os caracteres de cada linha em um um vetor.
Ele tem que ler os numeros que estão separados por espaço e imprimir, independente o número de caracteres. Só que quando imprime ele imprime isto:
Caracter nº1:[Ljava.lang.String;@1df38fd .
Caracter nº2:[Ljava.lang.String;@16a786 .
Caracter nº3:[Ljava.lang.String;@1507fb2 .
Caracter nº4:[Ljava.lang.String;@1efb836 .
Caracter nº5:[Ljava.lang.String;@126e85f .
Caracter nº6:[Ljava.lang.String;@161f10f .
outra linha
Caracter nº1:[Ljava.lang.String;@1193779 .
Caracter nº2:[Ljava.lang.String;@8916a2 .
Caracter nº3:[Ljava.lang.String;@2ce908 .
Caracter nº4:[Ljava.lang.String;@77158a .
Caracter nº5:[Ljava.lang.String;@27391d .
Caracter nº6:[Ljava.lang.String;@116ab4e .
Ele não imprime o caracter correto, alguém sabe como corrigir ? E desculpe a falta de conhecimento, pois sou novo na área de java ainda
public class CalculatorExport {
public static void main ( String args[] ) throws IOException
{
String linha = null;
int num1, num2;
File fatores = new File("numbers.txt");
FileReader reader = new FileReader("numbers.txt");
BufferedReader leitor = new BufferedReader(reader);
linha = leitor.readLine();
while(linha!=null)
{
String[] split = new String[linha.length()];
for(int x=1;x<linha.length();x++)
{
split[x] = linha.split("^[0-9]{1,}\\s[0-9]{1,}$").toString();
System.out.println("Caracter nº"+x+":"+ split[x] +".");
}
System.out.println("\n\noutra linha\n\n");
linha = leitor.readLine();
}
leitor.close();
reader.close();
}
}
>
o que acontece é que o split te retorna um array de string…
roda esse exemplo que vc vai sacar
String str = "JAVA DELPHI STRUTS SPRING HIBERNATE";
String campos[] = str.split(" ");
System.out.println(campos[0]);
System.out.println(campos[1]);
//System.out.prinln(campos[n]);
//ou ainda
String str = "JAVA DELPHI STRUTS SPRING HIBERNATE";
String campos[] = str.split(" ");
for (String string : campos) {
System.out.println(string);
}
sacou? vc ta recebendo dentro de cada posição do seu array vc recebe outro array…
O que você quer é isso aqui:
[code]public class CalculatorExport {
public static void main ( String args[] ) throws IOException
{
BufferedReader leitor =
new BufferedReader(new FileReader(new File("numbers.txt")));
String linha = leitor.readLine();
while(linha!=null)
{
String[] split = linha.split("^[0-9]{1,}\s[0-9]{1,}$");
for(int x=0;x < split.length; x++)
{
System.out.println("Caracter nº"+x+":"+ split[x] +".");
}
System.out.println("\n\noutra linha\n\n");
linha = leitor.readLine();
}
leitor.close();
reader.close();
}
} [/code]
AsusFx
Janeiro 7, 2009, 1:49pm
#4
@ViniGodoy
Cara deu erro, mas valeu pela ajuda ae.
Acho que é por ae, mais ainda tem algo errado ^^
@abelgomes
isso mesmo cara… exatamente isso, é que ele me retorna uma array de string, só tenho achar agora um modo de colocar cada caracter em um slot do array.
O jeito eu já te dei. Não compilei aquele código no eclipse, até pq não sei o seu formato de arquivo. Se tiver um errinho ali, é coisa boba.
O importante é que vc entenda a lógica.
Se sua expressão regular estiver certa, o split já está retornando os caracteres divididos nos slots. Só o que vc tem que fazer é imprimi-los.
Acho que o erro foi no forEach para array, que acho que não funciona…
AsusFx
Janeiro 7, 2009, 2:42pm
#7
@ViniGodoy
vlw cara quase deu certo, mas parece que não está indo mesmo^^, ele garra no split, a expressão regular está certa , tentei até sem expressão.
==edit==
ele fica sem erro nenhuma mas quando eu executo ele agarra no debug na linha que imprime o valor.
System.out.println("Caracter nº"+x+":"+ split[x] +".");
Funciona sim.[/quote]
Ah tá, acho que eu havia testado com um Vector.
AsusFx
Janeiro 7, 2009, 4:20pm
#10
@ViniGodoy
o erro era na expressão regular mesmo, acabou que já consegui o que eu queria ^^
O código ficou assim , muito obrigado pela ajuda
[code]package meritia;
import java.io .*;
public class CalculatorExport {
public static void main ( String args[] ) throws IOException
{
BufferedReader leitor = new BufferedReader(new FileReader(new File(“numbers.txt”)));
String linha = leitor.readLine();
while(linha!=null)
{
String[] split = linha.split(" ");
for(int x=0;x<split.length;x++)
{
System.out.println("Caracter nº"+x+":"+ split[x] +".");
}
System.out.println("\n\noutra linha\n\n");
linha = leitor.readLine();
}
saida.flush();
saida.close();
leitor.close();
leitor.close();
}
}[/code]
Também funciona. Funciona com arrays primitivos e qualquer classe que extends Iterable.