Olá Nothunt,
Bem eu ja passei por isso, eu não sei se seria a melhor solução, mas eu fiz assim:
1º Fiz um array contendo todos os numeros, de 0 a 9;
2º Fiz um for para procurar por todas as letras testando cada posição se tem alguma posição que combina com o array, caso tenha então é um número.
o código fica mais ou menos assim :
public boolean testaHora( String hora )
{
String[] numeros = {"0", "1", "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9"};
boolean somenteNumeros = true;
for ( int i = 0; i < hora.length(); i++ )
{
for ( int j = 0; j < numeros.length; i++ )
{
//Aqui faz o teste de negação:
// "1" NÃO é igual a "1"?
//R: FALSO "1" É IGUAL A "1"
// Se é FALSO, então não entra no if....
if ( !hora.substring( i , i + 1 ).equals( numeros[ j ] ) )
{
return false;
}
}
}
return somenteNumeros;
}
Como já disse, não sei se seria o melhor código, ainda mais tendo dois for, mas funciona, só que terá que testar o padrão de HH:MM, com os 2 pontos no meio, pode ser feito com uma substring:
if ( hora.substring( 0 , 3 ).equals( “:” ) )
{
//hora esta no padrão: HH:MM
}
Mas isso estamos falando de código feito na mao, uma melhor solução seria usar a API ( lembrei agora ). Usando a classe Time não tem erro, abaixo tem um trecho de como faria:
import java.sql.Time;
public boolean testaHora( String hora )
{
boolean horaOK = false;
String horaAlterada = "";
try
{
//Transforma uma String em Time, caso tenha um número ou
// Não esteja no formato: HH:MM:SS então da erro.
horaAlterada = "" + Time.valueOf( hora );
if ( horaAlterada.equals( hora ) )
{
horaOK = true;
}
}
catch( Exception e )
{
e.printStackTrace();
}
return horaOK;
}
Eu não tenho certeza que esteja 100% correto, pois não compilei nem testei os códigos, estou postando o que me lembro ( 00:30 e meia duzia de latinhas de cerveja, espero não ter confundido nada ).
Mas tente esses 2 códigos e tenha preferencia em usar a API, a legibilidade e o entendimento do código melhoram.
Espero ter ajudado, qualquer dúvida ou observação, poste novamente!
Boa Sorte!