Boa tarde, outro dia precisei trabalhar com mascara e encontrei esta classe.
public class MaskFormat{
private static final long serialVersionUID = 1L;
private String vMask;
private String vValue;
public static String getValueMaskFormat(String pMask, String pValue){
/*
* Substituir as mascaras passadas como 9, X por # para efetuar a formatcao
*/
pMask = pMask.replaceAll("1", "#");
pMask = pMask.replaceAll("2", "#");
pMask = pMask.replaceAll("3", "#");
pMask = pMask.replaceAll("4", "#");
pMask = pMask.replaceAll("5", "#");
pMask = pMask.replaceAll("6", "#");
pMask = pMask.replaceAll("7", "#");
pMask = pMask.replaceAll("8", "#");
pMask = pMask.replaceAll("9", "#");
pMask = pMask.replaceAll("0", "#");
pMask = pMask.toUpperCase().replaceAll("X", "#");
/*
* Formata valor com a mascara passada
*/
System.out.println("pMask: " + pMask + " pValue: " + pValue);
for (int i = 0; i < pValue.length(); i++) {
// if (pValue.substring(i, i + 1).equals(".")) {
// continue;
// }
pMask = pMask.replaceFirst("#", pValue.substring(i, i + 1));
System.out.println(pMask);
}
int posicao = pMask.indexOf("#");
if (posicao > 0) {
pMask = pMask.substring(0, posicao - 1);
}
/*
* Subistitui por string vazia os digitos restantes da mascara
* quando o valor passado é menor que a mascara
*/
return pMask.replaceAll("#", "");
}
public String getValueMaskFormat(){
return getValueMaskFormat(getMask(), getValue());
}
public String getMask(){
return vMask;
}
public void setMask(String mask){
vMask = mask;
}
public String getValue(){
return vValue;
}
public void setValue(String value){
vValue = value;
}
}
Só que não esta fazendo corretamente.
Ex.
public static void main(String[] args) {
MaskFormat.getValueMaskFormat("9.9.99.999.999", "3.1.02.010.04");
}
a saida é
pMask: #.#.##.###.### pValue: 3.1.02.010.04
3.#.##.###.###
3...##.###.###
3...1#.###.###
3...1..###.###
3...1..0##.###
3...1..02#.###
3...1..02..###
3...1..02..0##
3...1..02..01#
3...1..02..010
3...1..02..010
3...1..02..010
3...1..02..010
Alguem saberia como corrigir ou algo que faça corretamente?