Ola, pessoal!
Procurei pelo forum, mas nao achei o q precisava.
Eu preciso de algum metodo q ignore espaços em branco na hora da leitura apenas. Como por exemplo:
começando o texto pulando muitos espacos. . …
Ele leria desse jeito…mas nao hora de escrever em outro arquivo, ou mesmo para comparar com outra String, ficaria:
começando
o
texto
pulando
muitos
espacos
.
.
…
Ah…isso eh para um compilador q estou fazendo (parte lexica).
Ele leria o primeiro token (separado por " ") e compararia com minha tabela de palavras reservadas. O q ta acontecendo com minha saida eh
q ele ignora o primeiro espaço vazio (usei um split mesmo…apesar q o scanner ja faz isso acho), mas os demais ele conta como caracter. Entao
a saida fica com alguns espaços vazios a mais.
publicstaticvoidmain(String[]args){Stringword="começando o texto pulando muitos espacos. . ...";finalStringwordWithNoSpaces=word.replaceAll(" ","");System.out.println(wordWithNoSpaces);}
S
Souijirou
Entao Pedro..
Eu estava tentando usar o replaceAll..mas nao sei pq ele nao ta funcionando..
Na verdade eu tenho q dar um replace em um ArrayList q vai ser entrado por comando (nao existe um txt..ou pode existir tb).
//Lê arquivo linha a linha usando o prompt de comandos do DOS ou LinuxScannerscan=newScanner(System.in);List<String>linhas=newArrayList<String>();while(scan.hasNextLine()){//Separa as palavras baseado no espaço vazio(" ")String[]separa=scan.nextLine().split(" ");for(Stringfrase:separa){finalStringfrase2=frase.replaceAll(" ","");System.out.println(frase2););}
Acima tem parte do codigo..
Nao sei se ta certo...mas ele imprime do mesmo jeito..nao ta ignorando os espaços em branco q possa ter...na verdade fiz um teste pra substituir por 0...e nao faz nada..
o q tem de errado?!
S
Souijirou
PS: o ); do final foi a mais…no meu codigo nao tem isso
E
Eric_Yuzo
Esse problema está ocorrendo somente quando são digitados mais de um espaço consecutivo não é?
Você pode colocar um if para verificar se a string está vazia antes de imprimir.
/Lê arquivo linha a linha usando o prompt de comandos do DOS ou Linux
Scanner scan = new Scanner(System.in);
List<String> linhas = new ArrayList<String>();
while (scan.hasNextLine()) {
//Separa as palavras baseado no espaço vazio(" ")
String[] separa = scan.nextLine().split(" ");
for (String frase : separa) {
final String frase2 = frase.replaceAll(" ", "");
//Se a frase não estiver vazia, imprime.
if (!frase2.isEmpty())
System.out.println(frase2););
}
Ou pode utilizar o replaceAll para substituir os múltiplos espaços por um único.
//Lê arquivo linha a linha usando o prompt de comandos do DOS ou Linux
Scanner scan = new Scanner(System.in);
while (scan.hasNextLine()) {
//Separa as palavras baseado no espaço vazio(" ")
String[] separa = scan.nextLine().replaceAll("[ ]+", " ").split(" ");
for (String frase : separa) {
System.out.println(frase);
}
}
Bom, acho que é isso.
P
PedroTOliveira
Souijirou,
Se você remover o split como fica a saída?
E
entanglement
Se você for suficientemente preguiçoso, pode usar a classe StreamTokenizer. Ela já faz a análise léxica para você.
Acredito que usando Scanner dê pra fazer o efeito que você que assim:
Scannerscan=newScanner(" começando o texto pulando muitos espacos. . ...");while(scan.hasNextLine()){Stringword=scan.nextLine().replaceAll(" ","\n");System.out.println(word);}
PS: Não testei o código.
S
Souijirou
Valeu pelas dicas galera…vou dar uma testada em todas…
E nao vai ser por preguiça…mas sim por falta de tempo mesmo…mas vou ver esse negocio do StreamTokenizer…eh pra analise lexica q quero mesmo…
Eu posto depois se der certo…
abraxxx
S
Souijirou
Aeee…
Deu certo com o q o Eric falou…
Mudei isso aki no codigo: