manipulação de matriz em um arquivo[RESOLVIDO]

Pessoal,
estou com um problema.

é o seguinte, preciso ler uma matriz de um arquivo que é uma imagem.
Até ai tudo bem.

o problema é que em alguns arquivos, as matrizes são assim:

100 100 100 100

e em outros, assim:

100 100 100 100

ou seja, em um tem apenas um espaçamento " ", e em outro tem um espaçamento e dois " ".

Estou fazendo dessa forma:

 String linhas[] = imagem.readLine().split(" "); 

dessa forma da certo apenas para os arquivos que só tem um espaçamento.
Como fazer para os arquivos que em uma linha tem dois tipos de espaçamento?

obg.

Use

String linhas[] = imagem.readLine().split("\\s+"); 

Para mais detalhes sobre expressões regulares, veja http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html e http://aurelio.net/er

Certo.

Mas acabei de identificar outro problema.
Em algumas linhas, o primeiro caracter é em branco " ", e em outras não.
por exemplo a de baixo:
34 35 38 83 153 172 175 175 174 172 172 174 172 169 172 175 175
174 174 175 175 172 171 171 171 166 162 163 166 167 168 167 167 168

ai no caso, ele não está pegando a primeira linha.
como resolver isso?

obg.

Use “trim” para limpar os espaços em branco que estão à direita e à esquerda. Além disso, readLine() pode retornar “null” se você digitou um Ctrl+D ou Ctrl+Z (no console) ou se você está lendo isso de um arquivo, se chegar ao final do arquivo. Portanto, é sempre bom checar o retorno de readLine().

String linha = imagem.readLine();
if (linha != null) {
    String valores[] = linha.trim().split("\\s+");
}

mesmo assim ainda não pega algumas linhas.
fiz o teste e ele só pegou a 2 e a 4

ve soh como são. coloquei umas aspas para representar os espaços em branco

"34 "35 "38 "83 153 172 175 175 174 172 172 174 172 169 172 175 175
174 174 175 175 172 171 171 171 166 162 163 166 167 168 167 167 168
169 169 168 167 165 155 117 "76 "60 "58 "60 "63 "66 "67 "70 "72 "73
"73 "74 "77 "80 "79 "82 "84 "88 "91 "93 93 96 97 99 101 104 105

Cada vez que você chama readLine, ele lê a próxima linha. Se você fez algo como:

while ((linha = readLine()) != null) {
      readLine().split().blablabla
}

você só vai conseguir o resultado para as linhas pares, como você disse (as ímpares se perdem quando você fez o teste para ver se o arquivo não acabou :slight_smile: )
Você tem de guardar o valor de readLine em uma variável, como eu recomendei, e testar esse valor.
Cuidado com o copy & paste, ele deve ser usado apenas quando você sabe o que está fazendo.

é pq assim,

eu acabei de ver que a matriz da imagem está misturada.
ex:

34 35 38 83 153 172 175 175 174 172 172 174 172 169 172 175 175
174 174 175 175 172 171 171 171 166 162 163 166 167 168 167 167 168

a proxima linha começa nesse valor em negrito.

então, quando eu for preencher uma matriz de coluna 21, como é que fica?

Eu estou utilizando BufferedImagem.
Existe alguma outra opção de carregar um arquivo onde ele va pesquisando caracter por caracter sem devolver a linha toda?

Que arquivo bagunçado. Você pode ler um arquivo número por número, usando a classe Scanner e o método nextInt().

http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html

Obg entanglement.

problema resolvido.
Classe scanner muito mais simples