Tenho uma string de tempo com minutos, segundos e milissegundos. Exemplo: 1:25.684 Como posso formatar essa String para um formato completo de hora, preenchendo com 0, para ficar assim: 00:01:25.684
String tempo = “1:25.684”;
MaskFormatter f = new MaskFormatter("##:##:##.###");
String s = f.valueToString(tempo);
Mas ocorre o seguinte erro: java.text.ParseException: Invalid character
O mascaramento não serve para o propósito que tu queres. O mascaramento tem por objetivo determinar os caracteres válidos e as suas posições em um documento. Logo, uma entrada que respeite, não só os caracteres válidos, mas também a posição em que eles estão será ‘aceita’ pela máscara. Casos qualquer um dessas características não sejam satisfeitas, a máscara não ‘aceita’ a entrada, gerando um erro de parsing. Para os casos em que a entrada seja menor que padrão da máscara, se pode determinar uma string ou os caracteres ‘tampão’ por meio dos métodos setPlaceholder
e setPlaceholderCharacter
, respectivamente. Por exemplo:
String tempo = "123";
MaskFormatter formatter = new MaskFormatter ("### - ####");
formatter.setPlaceholderCharacter ('0');
String str = formato.valueToString(tempo);
Gerará:
123-000
Note que análise da entrada em relação à máscara, ocorre da esquerda para a direita, sendo que os preenchimentos ‘tapão’ serão feitos à direita.
Resumindo, o mascaramento não se presta a resolver esse tipo de problema. No entanto, se pode recorrer a alguns artifícios. Por exemplo:
import javax.swing.text.MaskFormatter;
public class TesteMascara {
public static void main(String[] args){
String tempo = "1:25.684";
String[] str = tempo.split(":");//Separa a string tempo ao encontrar ":"
System.out.println("[A]: " + tempo); //Mostra a string tempo bruta
if(str.length <= 2) //Se o número se separações forem menor ou igual a 2
if(str[0].length() < 2) //Se a primeira String (antes do ":") for menor que 2
tempo = "00:0" + tempo; //Acrescenta-se "00:00" no início de tempo
else if(str[0].length() == 2) //Senão, se for exatamente igual a 2, só acrescente "00:" à tempo
tempo = "00:" + tempo;
System.out.println("[D]: " + tempo);//Mostra a String tempo alterada
}
}
Rodando…
