Pattern de um float/real

4 respostas
homisinho

ola pessoal....
fiquei parado num probleminha aqui....
como eu crio um Pattern de um numero float/real???

public static String maxLength(String entrada,int tamanho){
        StringBuffer saida = new StringBuffer();   
        char[] caracteres = removeCaracters(entrada).toCharArray();   
        for(int i=0;i<caracteres.length && i>&lt=tamanho;i++){   
            saida.append(caracteres[i]);   
        }   
        return saida.toString();   
    }   
  
    public static String removeCaracters(String entrada){
         Pattern numericos = Pattern.compile("^\d*[0-9](\,\d*[0-9])?$",Pattern.CASE_INSENSITIVE);   
         Matcher encaixe = numericos.matcher(entrada);   
         StringBuffer saida = new StringBuffer();   
         while(encaixe.find())   
            saida.append(encaixe.group());   
         return saida.toString();   
    }

achei um codigo aqui no forum, quando clico eu testo.... pra so aceitar numeros e queria adaptar pra aceitar float/real....

dei uma estudada nos codigos mas o q tem de errado em "^\\d*[0-9](\\,\\d*[0-9])?$"??? :?:

4 Respostas

Aldrin_Leal

Meses atrás fiz um analisador léxico de pascal (caso estejam curiosos, http://www.leal.eng.br/apps/alp, é Java Web Start). Conferi o fonte há pouco:

"(\-?\d*\.\d+\-?\d*)"

Obviamente, ele não trata todas as situações (particularmente, ‘e’). Mas deve servir para o começo, não?

homisinho

na realidade “(\-?\d*\.\d+\-?\d*)” n aceita nada!!!
e o seu link n funcionou!!!

será q alguem tem alguma ideia???

Aldrin_Leal

Eu acho que você poderia ser menos chorão e mais construtivo na hora de responder :roll:

Enfim, forneça alguns valores que não funcionaram, por favor. No que tange a expressão, de fato, havia uma situação aonde um valor, digamos, ‘-5-’ poderia ser válido. Tirei, removi o grouping (era necessário apenas à minha aplicação) e ficou assim:

“\-?\d*\.\d+”

Testei usando um applet neste endereço. Neste caso, você precisa fazer o unescape. i.e., excluir as contra-barras em duplicata.

homisinho

Obrigado ai "Aldrin Leal",
mas eu ja estava estudando ER a mais de 4 horas.... por isso fui pouco construtivo....
mas no meu caso eu estava chamando a função

# public static String maxLength(String entrada,int tamanho){  
#        StringBuffer saida = new StringBuffer();     
#        char[] caracteres = removeCaracters(entrada).toCharArray();     
#        for(int i=0;i<caracteres.length && i>&lt=tamanho;i++){     
#            saida.append(caracteres[i]);     
#        }     
#        return saida.toString();     
#    }     
#   
#    public static String removeCaracters(String entrada){  
#         Pattern numericos = Pattern.compile("^(([0-9]*)|([0-9]+,[0-9]*))$",Pattern.CASE_INSENSITIVE);     
#         Matcher encaixe = numericos.matcher(entrada);     
#         StringBuffer saida = new StringBuffer();     
#         while(encaixe.find())     
#            saida.append(encaixe.group());     
#         return saida.toString();     
#    }

em cada evento key da minha jTextField, entao n funcionava pois na ER feita nós exigia um "d" apos o ".", coisa q n ocorria pois antes de o usuario digitar o "d" das casas deceimais o evento apagava o "." .....
mas com a condição opcional "|" "ou" funcionou bem..."^(([0-9]*)|([0-9]+,[0-9]*))$"

Obrigado por tentar ajudar....

Criado 18 de setembro de 2007
Ultima resposta 18 de set. de 2007
Respostas 4
Participantes 2