Ignorar espaços em branco[RESOLVIDO]

9 respostas
S

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.

Alguem tem alguma ideia?!

Agradeço desde ja!

9 Respostas

P

Sugiro consultar o JavaDoc amigo…

O que você quer resolve assim:

public static void main(String[] args) {

        String word = "começando o texto pulando muitos espacos. . ...";
        final String wordWithNoSpaces = word.replaceAll(" ", "");
        System.out.println(wordWithNoSpaces);
    }
S

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 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(" ", "");
                                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

PS: o ); do final foi a mais…no meu codigo nao tem isso

E

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

Souijirou,

Se você remover o split como fica a saída?

E

Se você for suficientemente preguiçoso, pode usar a classe StreamTokenizer. Ela já faz a análise léxica para você.

http://download-llnw.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html

P

Acredito que usando Scanner dê pra fazer o efeito que você que assim:

Scanner scan = new Scanner("  começando o texto pulando muitos espacos. . ...");
        while (scan.hasNextLine()) {
            String word = scan.nextLine().replaceAll(" ", "\n");
            System.out.println(word);
        }

PS: Não testei o código.

S

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

Aeee…
Deu certo com o q o Eric falou…
Mudei isso aki no codigo:

String[] separa = scan.nextLine().replaceAll("[ ]+", " ").split(" ");

Ai deu exatamente a saida esperada: sem pular nenhum outro espaço.

Valeu!
Abraços!

Criado 10 de setembro de 2010
Ultima resposta 11 de set. de 2010
Respostas 9
Participantes 4