• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

softklin

[Resolvido] Duvidazita com expressões regulares

4 mensagens neste tópico

Boas pessoal!

Antes de iniciar este tópico, fiz a trivial pesquisa para procurar por questões semelhantes. Apareceram montes delas, em diversas linguagens porém não consegui encontrar a resposta a isto: eu tenho uma string que quero ficar apenas com as letras de 'a' a 'z' e claro, com os espaços.... para isso pus este código

quote = quote.replaceAll("[^a-zA-Z ]","");

Tudo bonito e bastante simples, mas por exemplo se ponho esta frase:

"Nem todos os cães são bravos"

fica:

"Nem todos os ces so bravos"...  :P

O meu problema está em representar estes caracteres ç ã õ... Alguem me consegue alterar esta função para realizar o que pretendo? Pensei em por tudo "à força bruta", do genero [^a-zA-Z ][^çãõâ], só que não sei se haverá metodo mais prático....

Grato pela vossa ajuda!  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse é um problema relacionado com localização. Os caracteres que estás a tentar encontrar vão depender do locale defino no sistema.

Que eu saiba, o java não possui flag nenhuma para fazer esse tipo de verificação, isto é, na API standard que vem com o JDK essa operação não é possivel sem fazeres, como disseste "à força bruta". No entanto podes experimentar usar outra biblioteca de expressões regulares, por exemplo: http://jakarta.apache.org/regexp. Esta biblioteca possui algumas modificações. É uma biblioteca 100% Java e open source.

Não a usei até ao momento, mas julgo ter visto na documentação da API que permitia comparações baseadas no locale e até comparações com Unicode.

Mas esse é um problema que nem o PERL consegue resolver de forma simples, está muito dependente da plataforma.

Se por acaso descobrires uma forma de fazer isso usando a API standard do Java avisa :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, infelizmente esqueci-me de referir um ponto, que era que neste trabalho não me permitem usar bibliotecas externas... bem, acabei por resolver desta maneira, embora insuficiente para outros, chega para o que se pretende fazer.

quote = quote.replaceAll("[0123456789]|[\\/?:'+#.*\"=!{}$%)»«(,>]","");

Mais uma vez, obrigado Knitter pela tua ajuda :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, sei que está resolvido mas só para dar uma dica.

Em vez de:

[0123456789]

pode usar

[0-9]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora