La función String.charAt() de Java arroja una excepción de tipo java.lang.StringIndexOutOfBoundsException.
El siguiente código debería darme una cadena concatenada de todos los caracteres después de un espacio en una oración:
public class Main {
public static void main(String[] args) {
System.out.println(generateFromSentence("¡Hola Mundo!"));
}
public static String generateFromSentence(String sentence) {
String output = String.valueOf(sentence.charAt(0));
for (int i = 0; i <= sentence.length(); i++) {
if (sentence.charAt(i) == ' ') {
String following = String.valueOf(sentence.charAt(i+1));
output = output.concat(following);
}
}
return output;
}
}
Lamentablemente, lanza una excepción:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:702)
at Main.generateFromSentence(Main.java:9)
at Main.main(Main.java:3)
No entiendo por qué el índice estaría fuera de rango en:
String output = String.valueOf(sentence.charAt(0));
Especifico el índice 0: ¿no debería ser el primer carácter de mi cadena, verdad?
Gracias de antemano.
davy.ai
Hay un error en la condición del bucle for en el método
generateFromSentence
.La condición del bucle for debería ser
i < sentence.length()
en lugar dei <= sentence.length()
.Esto se debe a que el índice del último carácter en una cadena es
sentence.length() - 1
.Al incluir el símbolo
=
en la condición, el bucle intenta acceder a un índice fuera de rango, lo que provoca laStringIndexOutOfBoundsException
.Además, el código solo tiene en cuenta los espacios entre palabras y concatena solo el siguiente carácter después de un espacio. Si hay varios espacios entre palabras o si no hay espacios en la cadena, la implementación actual no funcionará como se espera.
Una implementación más sólida para concatenar todos los caracteres después de un espacio en una oración sería:
Esta implementacion usa un StringBuilder para concatenar todos los caracteres después del primer espacio y devuelve una cadena vacía si la oración de entrada es nula o vacía.