ER [Expressões regulares]

hoje comecei fazer uns testes usando ER e estou com um problema :slight_smile:

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 :slight_smile: 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());