Formatação string Java

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…

image