Classe para formatar um texto com mascara em Java

Estou postanto essa classe pois tentei achar mas não encontrei nenhuma classe em Java que fizesse o que eu estava procurando. Formatar um valor usando uma mascara que eu passei.

Abaixo o classe completa que faz isso.


public class MaskFormat{

	private static final long serialVersionUID = 1L;

	private String vMask;

	private String vValue;

	private boolean vReturnValueEmpty;

	public static String getValueMaskFormat(String pMask, String pValue,
			boolean pReturnValueEmpty){

		/* 
		 * Verifica se se foi configurado para nao retornar a  
		 * mascara se a string for nulo ou vazia se nao 
		 * retorna somente a mascara. 
		 */ 
		if (pReturnValueEmpty == true
				&& (pValue == null || pValue.trim().equals("")))
			return "";

		/* 
		 * Substituir as mascaras passadas como  9, X, * por # para efetuar a formatcao
		 */
		pMask = pMask.replaceAll("*", "#");
		pMask = pMask.replaceAll("9", "#");
		pMask = pMask.toUpperCase().replaceAll("X", "#");

		/* 
		 * Formata valor com a mascara passada  
		 */
		for(int i = 0; i < pValue.length(); i++){
			pMask = pMask.replaceFirst("#", pValue.substring(i, i + 1));
		}

		/* 
		 * Subistitui por string vazia os digitos restantes da mascara 
		 * quando o valor passado é menor que a mascara   
		 */
		return pMask.replaceAll("#", "");
	}

	public static String getValueMaskFormat(String pMask, String pValue){
		return getValueMaskFormat(pMask, pValue, true);
	}

	public String getMask(){
		return vMask;
	}

	public void setMask(String mask){
		vMask = mask;
	}

	public String getValueMaskFormat(){
		return getValueMaskFormat(getMask(), getValue(), isReturnValueEmpty());
	}

	public String getValue(){
		return vValue;
	}

	public void setValue(String value){
		vValue = value;
	}

	public boolean isReturnValueEmpty(){
		return vReturnValueEmpty;
	}

	public void setReturnValueEmpty(boolean pReturnValueEmpty){
		vReturnValueEmpty = pReturnValueEmpty;
	}
}

Cara, tem essa

javax.swing.text.MaskFormatter

E se vc estiver usando GUI, esse valor ja pode vir formatado, usa

javax.swing.JFormattedTextField

Essa classe que eu criei naum eh pra usar com o Swing para ele sei que tem a classe MaskFormatter que faz… isso.

A minha server pra quando vc precisa de mascarda pra outra coisa sem ser um edit. Como por exemplo pra imprimir em um relatorio, ou pra formatar um valor em uma pagina web.

Olá boa tarde,

O DefaultFormatter pode formatar objetos de qualquer classe que tenha um construtor com um parametro de sequencia e um método toString correspondente. Por exemplo, a classe URL tem um construtor URL( String ) que pode ser usado para construir uma URL a partir de uma sequencia como :

URL url = new URL("http://java.sun.com");

Assim, voce pode usar DefaultFormatter para formatar objetos URL. O formatador chama toString no valor do campo para iniciar o texto do campo. Quando o campo perde o foco, o formatador constrói um novo objeto da mesma classe como o valor atual, usando o construtor com um parametro String. Se o construtor gerar uma exceção, a edição não sera valida.

Experimente alterar o inicio do url “http:” e em seguida mudar o foco para o proximo campo.

Espero que posso ter colaborado,

segue um exemplo:

/**
 * @author Domingos Bernardo Gomes Santos
 * 
 */

import java.awt.GridLayout;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.NumberFormat;

import javax.swing.*;
import javax.swing.text.DefaultFormatter;

public class DefaultFormatterTeste {

	public static void main(String[] args) {

		DefaultFormatterFrame frame = new DefaultFormatterFrame();
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
	}

}

class DefaultFormatterFrame extends JFrame{
	
	public DefaultFormatterFrame(){
		
		setTitle("DefaultFormatterTeste");
		setSize( 300, 75 );
		
		JPanel Painel = new JPanel();
		Painel.setLayout( new GridLayout( 0, 2 ));
		
		JLabel labelCampo1 = new JLabel( "URL : ");
		JLabel labelCampo2 = new JLabel( "Outro campo: ");
		
		try{
			
			DefaultFormatter formatter = new DefaultFormatter();
			formatter.setOverwriteMode(false);
			JFormattedTextField urlField = new JFormattedTextField( formatter );
			urlField.setValue( new URL("http://java.sun.com"));
			
			Painel.add( labelCampo1 );
			Painel.add( urlField );
			
		}
		catch( MalformedURLException e)
		{ 
			e.printStackTrace(); 
		}
		
		JFormattedTextField intCampo = new JFormattedTextField( NumberFormat.getIntegerInstance() );
		intCampo.setValue( new Integer(100));
		Painel.add( labelCampo2 );
		Painel.add( intCampo );
		
		add( Painel );
		
	}
	
	
}