Ler arquivo e jogar em uma Matriz

2 respostas
G

Galera,

To com uma bronca aqui, para finalizar um projeto só falta um método onde ele recebe por parametro o caminho do arquivo e o numero (que no caso vai ser o numero de linha e coluna de uma matriz quadrada).

Esse metodo vai ler um arquivo txt. no seguinte formato:

1.2.3.4.5.6.7.8.9

E vai retornar uma matriz.

Essa matriz no caso vai ter os simbolos dessa string delimitado pelo ponto, no caso eu informei que o tamanho da minha matriz é 3, então vou ter uma matriz[2][2], ai na posição matriz[0][0] = 1, matriz matriz[0][1] = 2…

Com isso ele tera que saber o tamanho maximo para quebrar e ja saber que o proximo simbolo vai para a outra linha da matriz.

Eu tava pensando em fazer assim, mas não rolou acho por erro de lógica mesmo:

public String[][] load(String nomeArquivo, int tamanhoMatriz) throws Exception {
		
		String[][] matriz2 = new String[tamanhoMatriz][tamanhoMatriz];
		BufferedReader bf = new BufferedReader(new FileReader(nomeArquivo));
				
		String line= null;;

		do{

			try {
				line = bf.readLine();
			} catch (IOException e) {
			}

			if(line != null){

				String[] parts = line.split(".");
				String simbolo = null;
				try {
					simbolo = parts[0];
				} catch (NumberFormatException e) {
				}

				for (int i = 0; i < parts.length; i++) {
					for (int j = 0; j < parts.length; j++) {
						matriz2[i][j]= simbolo;
					}
				}
			}
		}while(line != null);
		
		bf.close();
		return matriz2;
		
	}

2 Respostas

E

O “split” recebe expressões regulares, e o “.” é um caracter especial para expressões regulares, que quer dizer “qualquer caracter, inclusive o ponto”.

Corrija seu código por:

String[] parts = line.split("\\.");

ou

String[] parts = line.split(Pattern.quote ("."));

ou

String[] parts = line.split("[.]");

Veja o que você acha mais fácil de entender. As três formas funcionam direitinho.

G

Ah blzz ajeitei, eu coloquei um breakpoint nessa parte ai vi que ele quebra a String certa nos números, a broca ta sendo quando ele preenche a matriz o resultado fica com a matriz cheiu de 1 1 1 1 1 1 1 1 1.

para fazer o teste eu coloquei 1.2.3.4.5.6.7.8.9, coloque o tamanho quadrado de 3 da matriz

public class Teste {

	
	public static String[][] load(String nomeArquivo, int tamanhoMatriz) throws Exception {
		
		String[][] matriz2 = new String[tamanhoMatriz][tamanhoMatriz];
		BufferedReader bf = new BufferedReader(new FileReader(nomeArquivo));
				
		String line= null;;

		do{

			try {
				line = bf.readLine();
			} catch (IOException e) {
			}

			if(line != null){

				String[] parts = line.split("\\.");
				String simbolo = null;
				try {
					simbolo = parts[0];
				} catch (NumberFormatException e) {
				}

				for (int i = 0; i < tamanhoMatriz; i++) {
					for (int j = 0; j < tamanhoMatriz; j++) {
						matriz2[i][j]= simbolo;
					}
				}
			}
		}while(line != null);
		
		bf.close();
		return matriz2;
		
	}
	
	public static void main(String[] args) throws Exception {
		load("./files/dictionary.qv", 3);
	}
}
Criado 7 de outubro de 2009
Ultima resposta 7 de out. de 2009
Respostas 2
Participantes 2