Exercicio de funções de String

Boa tarde!

estou tentando resolver o seguinte exercício : Escreva um programa para ler uma quantidade indeterminada de palavras (o programa termina ao ser informado uma palavra que começa com a letra ‘f’). Para cada palavra informada (incluindo a última) escrever a primeira e a última letra.

através do código que criei, pela meu ponto de vista era pra funcionar kkk, mas ao digitar a primeira palavra ele imprime a primeira letra e em seguida gera um erro, segue o código e em seguida o erro:

public static void main(String[] args) {

	Scanner in = new Scanner(System.in);

	char exit = 'f';
	int i = 0;
	String palavra = "";

	while (true) {
		if (i == 0) {
			i++;
			System.out.println("Digite uma palavra e pressione ENTER:");
			palavra = in.nextLine();

		} else if (palavra.charAt(0) != exit) {
			System.out.println("Digite a próxima palavra. "
					+ "Para encerrar a digitação, digite uma palavra com f e pressione ENTER");
			palavra = in.nextLine();

		}
		int x = palavra.length();
		System.out.println(palavra.charAt(0));
		System.out.println(palavra.charAt(x));

	}

}

O erro que está dando é este:

Digite uma palavra e pressione ENTER:
ana
a
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.charAt(Unknown Source)
at exercicios.Exercicio15.main(Exercicio15.java:29)

Alguem pode me ajudar!?

altere para

System.out.println(palavra.charAt(x - 1));

e não esqueça de validar strings vazias.

1 curtida

Muito obrigado, isso resolveu. Mas poderia me explicar qual a lógica desse “-1” e porque String vazia?

O índice inicial de uma String é 0, e o final é tamanho - 1.
Ex: a palavra "String"
posicao 0 = "S"
posicao 1 = "t"
posicao 2 = "r"
posicao 3 = "i"
posicao 4 = "n"
posicao 5 = “g”

Onde o tamanho é 6, e os indices variam de 0 à 5.

É preciso validar a String vazia, pois neste caso o tamanho da mesma será 0, e ao tentar a acessar a posição final (tamanho - 1), terá o valor -1 causando uma exception igual a gerada em sua pergunta inicial ao tópico.

1 curtida

Mais explicado impossível, um dia chego nesse nível! HAHAHA. Muito obrigado pela ajuda e explicações!

1 curtida