<resolvido>Trocar ponto por virgula

Olá colegas, tenho um problema que não é novo, já que alguns já abordaram aqui no forúm.

Esse artigo chegou o mais perto, mas não chegou a uma conclusão.

Portanto vamos lá, tenho esse código:

public class SomarNumeros {

//método principal
public static void main(String[] args) {
	
	Scanner entrada = new Scanner( System.in );
	
	double numero1;
	double numero2;
	
	System.out.print("Digite o primeiro número: ");
	numero1 = entrada.nextDouble();
	
	System.out.print("Digite o segundo número: ");
	numero2 = entrada.nextDouble();
	
	double resultado = numero1 + numero2;
	
	System.out.printf("A soma " + numero1 + " + " + numero2 + " = " + resultado);
}

}

Até aí sem nenhum problema, só que quando digito 22.1, então solta essa exceção java.util.InputMismatchException.

Então pensei o modo de consertar isso, é quando a pessoa digitar o número, 22.1 ir com a vírgula 22,1 (um tipo de mascara)

Como fazer isso ainda não sei, mas dei uma pesquisada e vi o método replace e fiz assim o código:

               Scanner entrada = new Scanner(System.in);

		double numero1;
		String digitarNumero = "Digite um numero: ";
		
		System.out.println(digitarNumero.replace(".", ","));
		numero1 = entrada.nextDouble();

Como esperado não deu certo.

Fiz mais pesquisa e achei esse código:

                String string = "3.14";

		System.out.println(string);

		char[] cs = string.toCharArray();

		for (int i = 0; i < cs.length; i++) {
			if (cs[i] == '.') {
				cs[i] = ',';
			}
		}

		System.out.print(cs);

Esse código faz a troca de boa, só que não é na hora de execução alguém pode me ajudar?

Agradeço quem tiver disponibilidade.

Olá, vc pode fazer por evento se estiver usando campos em tela, na leitura por console o esquema é bem diferente.
o Scanner se baseia no Locale para fazer a leitura. Por exemplo: pro brasileiro o separador de decimal é vírgula, mas no padrão americano é ponto. Portanto, se usar o código abaixo vai funcionar:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

4 curtidas

Outro exemplo:

Scanner entrada = new Scanner(System.in);
System.out.println("Digite um numero: ");
String texto = entrada.nextLine();
texto = texto.replaceAll(',', '.');
double numero = Double.parseDouble(texto);
4 curtidas

@staroski vlw resolveu meu problema!

@Rodrigo_Void vlw! não sabia desse useLocale mais um nível de aprendizado

Muito obrigado, salvou meu dia!

Bom dia, estou usando o replace(’,’, ‘.’), no meu programa, esta funcionando perfeitamente, porem quando o numero passa para a casa de 1.000,00 dai da erro, se for numero pequenos em q o ponto ou a vírgula separa o numero dos centavos da certo, mas quando o numero passa de 999,99 da erro pq surge o ponto ou a vírgula num segundo lugar, será q tem algum método para contornar esse problema?