Ver se String esta dentro da mascara ou parte dela

7 respostas
xandevieira

Bom dia, estou com dificuldade em resolver um pequeno problema.
Posso ter uma mascara assim:
#.#.##.##.##.##.####
Se eu passar uma String assim ela estará correta, pois estão em parte da mascara.
1
1.1
1.1.01
1.1.01.01
1.1.01.01.01
1.1.01.01.01.01
1.1.01.01.01.01.0001

Se eu passar algo diferente em algum nível estará errada.

7 Respostas

xandevieira

Consegui resolver assim: public void testaMascara() { String codigoContabil = "1.1.01.02.04.01.01"; String deMascara= "9.9.99.99.99.99.9999"; String[] mascara = deMascara.split("\\."); String[] contaContabil = codigoContabil.split("\\."); for (int ii = 0; ii < contaContabil.length; ii++) { if(contaContabil[ii].length() != mascara[ii].length()){ System.out.println("contaContabil[ii].length(): "+contaContabil[ii].length()+" | mascara[ii].length(): "+mascara[ii].length()); } } }
mas achei que ficou pouco elegante.
Se alguém tiver algo melhor fique a vontade.

charleston10
/* ninguem vai ver seu código, pelo menos quem vai usar seu software não*/
xandevieira

O problema é manutenção, outro programador pode não entender ou achar gambiarra, sei lá.
Ta funcionando, no momento é o que importa, heheh

charleston10

ah pra mim nao ta gambiarra, é o jeito de se fazer…
o cara que for da manutenção vai enteder…

ou voce pode comentar

// Chefe, foi o senhor quem mandou eu colocar esssa gambiarra.   

//Quando eu escrevi esse código, apenas Deus e eu sabíamos o que eu estava fazendo  
//Hoje só Deus sabe 

//Desculpa ai mano, mas tava com presa porque a empresa tava me pressionando pra caramba e tive que criar o código todo estruturado, foi mal.  

//*****Eu tenho de encontrar um emprego melhor  


if( 0 == 1 ) { //Apenas para garantir que meu comentário não vai ser compilado  
    /* 
        //<série de comentários> 
        //... 
        //<fim da série de comentários> 
    */  
}

kkkk

E

Esse é o tipo de expressão regular que é bem chatinha de escrever e mais chata ainda de entender.
Em particular, eu prefiro a solução dos loops que você mostrou (porque é fácil de entender e fácil de mudar, caso a máscara mude), mas se quiser uma expressão regular, aí vai ela:

Pattern regex = Pattern.compile ("\\d(\\.\\d(\\.\\d\\d(\\.\\d\\d\\.(\\d\\d\\.(\\d\\d(\\.\\d{4})?)?)?)?)?)?");
String codigoContabil = ...;
if (regex.matcher(codigoContabil).matches()) {
       ...
}

Conclusão: use os loops mesmo. Essa expressão regular é dos infernos.

xandevieira

Pois é, já tentei aprender mexer com expressão regular, mas nunca consegui entender esse troço.
E minha mascara vai mudar, pois depende de cada cliente.

E

Expressão regular é legal mas deve ser usada com moderação.

No seu caso, por exemplo, achei uma expressão regular, mas ela é tão complexa e inflexível que, sinceramente, não vale a pena usá-la.

Criado 6 de março de 2013
Ultima resposta 6 de mar. de 2013
Respostas 7
Participantes 3