java.lang.NumberFormatException: For input string: "2 + 2"?

Queria saber o porquê de meu programa dar NumberFormatException, sendo que se eu criar um “int x = 2 + 2 == 4”, então por que “int y = Integer.parseInt(“2 + 2”) == NumberFormatException” ?

public static void main(String[] args) 
{
	int  soma = Integer.parseInt("2") + Integer.parseInt("2") ;
	System.out.println(soma);
	
	int a = 2 + 2 ;
	System.out.println(a);
	
	Integer b = new Integer("2 + 2");
	System.out.println(b);
}

 Exception in thread "main" 
        java.lang.NumberFormatException: For input string: "2 + 2"
    	at java.lang.NumberFormatException.forInputString(Unknown Source)
    	at java.lang.Integer.parseInt(Unknown Source)
    	at java.lang.Integer.<init>(Unknown Source)
    	at exercicios.teste.main(teste.java:12)
1 curtida

Bom dia, é bem simples, o parseInt converte o tipo do valor para um inteiro, CASO seja um inteiro válido. “2 + 2” obviamente não é um inteiro válido, pois possui caracteres como o + e os espaços que não podem ser convertidos. O parseInt apenas transforma um NÚMERO inteiro que está em formato String para o tipo Integer, não faz conversões do tipo remover caracteres diferentes de número menos ainda resolve equações.

2 curtidas

Exemplificando o que o @Rodrigo_Void explicou, veja:

// Convertendo o número 1 em inteiro
new Integer("1"); // Ok

// Convertendo a letra "a" em inteiro
new Integer("a"); // Erro: java.lang.NumberFormatException: For input string: "a"

// Convertendo o sinal "+" em inteiro
new Integer("+"); // Erro: java.lang.NumberFormatException: For input string: "+"

// Convertendo o texto "2 + 2" em inteiro
new Integer("2 + 2"); // Erro: java.lang.NumberFormatException: For input string: "2 + 2"

Entendi… então existe alguma outra coisa que eu possa fazer para converter uma string “2+2” pra um int 4 ? ou é impossível ?
Obrigado.

Não.
Até existem algumas APIs (de terceiros) que resolvem equações em String. NÃO RECOMENDO.
Ou vc pode desenvolver sua api que resolve esse tipo de informação. NÃO É FÁCIL
Isso realmente é necessário pra vc?

Sim… eu precisava de algo que faria isso, mas tudo bem :frowning:

Rapaz, você poderia fazer isso fazendo uma busca pelos sinais aritméticos pra saber onde eles estão e assim saber qual operação será feita e depois fazer um split pra pegar os valores.

Muito obrigado, vou tentar fazer aqui, vlw pela ajuda de todos !