hoje comecei fazer uns testes usando ER e estou com um problema 
do{
System.out.print("Salário:");
salario = dg.next();
Pattern p = Pattern.compile("(\s.*|.*\D.*)");
m = p.matcher(salario);
if (!m.matches() && !salario.equals(""))
vlsalario = Float.parseFloat(salario);
if (vlsalario < 0 || m.matches() || salario.equals(""))
System.out.println("Salário inválido.");
}while(vlsalario < 0 || m.matches() || salario.equals(""));
aqui será validado quando a primeira casa da string não for um espaço em branco e for digitado apenas números.
tem como permitir que digite apenas vírgula fora os números?
tentei aqui de várias maneiras e nada deu certo =/
boolean b = false;
String salario = "10500,99";
Pattern p = Pattern.compile("\d*,?\d*");
Matcher m = p.matcher(salario);
b = m.matches();
System.out.print("Salario: ");
if (b) {
salario = salario.replace(',', '.');
System.out.println(Float.parseFloat(salario));
} else
System.out.println("Invalido");
esse trecho de codigo acima permite validar se o salario informado contem apenas numeros e
se tem zero ou uma virgula.
ve se isso te ajuda de alguma forma.
falow…
eu já tinha feito de outro jeito, mais ajudou sim robson
obrigado
desse modo ele valida também se a string não é nula ou se a primeira posição não é um espaço vazio.
do{
System.out.print("Salário:");
salario = dg.next();
Pattern p = Pattern.compile("^$?[0-9]+[.]?[0-9]*$");
m = p.matcher(salario);
if (m.matches())
vlsalario = Float.parseFloat(salario);
if (vlsalario < 0 || !m.matches() || salario.equals(""))
System.out.println("Salário inválido.");
}while(vlsalario < 0 || !m.matches());