Separar os caracteres de uma String

Pessoal, sou um iniciante em Java e estou tendo um problema com meu código:

    int YYGGId = scanner.nextInt();
	char[] YYGGIdDigitos = String.valueOf(YYGGId).toCharArray();
	System.out.println(YYGGIdDigitos[0] + YYGGIdDigitos[1]);

A minha ideia é obter os dois primeiros dígitos inseridos pelo usuário. Por exemplo, se o usuário digita 55423, eu quero trabalhar só com os dígitos 55. O problema é que está sendo retornado um valor sem sentido: eu digito 11 e o retorno é 98, se digito 13, o retorno é 100.

Eu fiz a seguinte modificação no código:

    int YYGGId = scanner.nextInt();
	char[] YYGGIdDigitos = String.valueOf(YYGGId).toCharArray();
	String YY = YYGGIdDigitos[0] + "" + YYGGIdDigitos[1]; //Adicionei essa String
	System.out.println(YY);

Dessa maneira, passei a obter o resultado desejado. Alguém pode me explicar por que acontece o erro no primeiro código?

Voce criou a instancia (Scanner scanner = new Scanner(System.in)) ?

1 curtida

Tenta assim:

 Scanner scanner = new Scanner(System.in);
        String YYGGId = scanner.nextLine();
	char[] YYGGIdDigitos = String.valueOf(YYGGId).toCharArray();
	String YY = YYGGIdDigitos[0] + "" + YYGGIdDigitos[1]; //Adicionei essa String
	System.out.println(YY);
2 curtidas

O java é uma linguagem fortemente tipada, ou seja o tipo é importante. O que estava acontecendo é que você estava capturando como int (inteiro), mas o estava tratando para extrair os dois primeiros dígitos como sendo uma String, entendeu?

1 curtida

Isso não é um erro, mas uma característica do Java.
O operador + serve para somar valores, a única exceção é no caso do tipo String, onde ele faz uma concatenação.

Então quando você faz YYGGIdDigitos[0] + YYGGIdDigitos[1], você não está concatenando dois caracteres mas sim somando o valor deles.
Neste caso você tem dois char com o símbolo '1' que equivale à 49.
49 + 49 = 98

String doisDigitos = meuObjetoString.subString(0, 2);

1 curtida

Em sua primeira versão do código, você está somando os valores decimais ASCII dos caracteres.
character ‘1’ = 49, character ‘3’ = 51. (https://www.sqa.org.uk/e-learning/CompArch01CD/images/pic005.gif)

Na segunda versão do código, ao utilizar o string vazio (YYGGIdDigitos[0] + “” + YYGGIdDigitos[1]), você altera a função do operador ‘+’. Ele deixa de ser soma, e passa a ser concatenação.

1 curtida

Obrigado pela ajuda, pessoal!