string index out of bounds error in java (charAt)

Kyle picture Kyle · Mar 24, 2014 · Viewed 16k times · Source

Quick question. I have this code in a program:

input = JOptionPane.showInputDialog("Enter any word below")
int i = 0;  
for (int j = 0; j <= input.length(); j++)  
{
    System.out.print(input.charAt(i));  
    System.out.print(" "); //don't ask about this.  
    i++;
}   
  • Input being user input
  • i being integer with value of 0, as seen

Running the code produces this error:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(Unknown Source)
at program.main(program.java:15)

If I change the charAt int to 0 instead of i, it does not produce the error...
what can be done? What is the problem?

Answer

Mena picture Mena · Mar 24, 2014

Replace:

j <= input.length()

... with ...

j < input.length()

Java String character indexing is 0-based, so your loop termination condition should be at input's length - 1.

Currently, when your loop reaches the penultimate iteration before termination, it references input character at an index equal to input's length, which throws the StringIndexOutOfBoundsException (a RuntimeException).