# String Index Out Of Bounds Exception!



## DATake (11. Jan 2013)

Ich mache gerade eine Übungsaufgabe und verzweifle gerade an dieser Exception. Ich kann nicht nachvollziehen warum die Exception geworfen wird? Hat jemand eine Idee.



```
public class Zeichenkette implements Aufzaehlung {

	protected String meineZeichenkette;
	protected int pos;

	public Zeichenkette(String meineZeichenkette) {
		this.meineZeichenkette = meineZeichenkette;
	}

	public boolean hatNochElement() {
		return meineZeichenkette.charAt(pos) > 0 ? true : false;
	}

	public Object naechstesElement() {

		return meineZeichenkette.charAt(pos++);
	}
}
```
________________________________________________________________________________________



```
public interface Aufzaehlung {

	public boolean hatNochElement();
	public Object naechstesElement();
		
}
```

________________________________________________________________________________________



```
public class AufzaehlungTest {

	public static void main(String[] args) {

		Aufzaehlung kette = new Zeichenkette("Dies ist eine Zeichenkette");
		while (kette.hatNochElement())

			System.out.print(kette.naechstesElement() + " ");
	}

}
```
Ausgabe:


```
D i e s   i s t   e i n e   Z e i c h e n k e t t e Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 26
	at java.lang.String.charAt(String.java:686)
	at Zeichenkette.hatNochElement(Zeichenkette.java:11)
	at AufzaehlungTest.main(AufzaehlungTest.java:6)
```
Die Aufgabenstellung: Implementieren Sie die Klasse Zeichenkette

Ein Objekt der Klasse Zeichenkette liefert nacheinander alle Zeichen der Zei- chenfolge meineZeichenkette.
Der Aufruf von hatNochElement() liefert true, wenn es noch Zeichen in der Kette gibt, ansonsten wird false zurückgeliefert.
Der Aufruf von naechstesElement() liefert das nächste Zeichen an den Auf- rufer und rückt mit pos eine Stelle weiter.

Die main Methode darf ich nicht verändern.


----------



## Spin (11. Jan 2013)

Lass dir doch mal 

```
meineZeichenkette.charAt(100);
```

ausgeben und du weisst warum die eine Exception bekommst.

Deine Prüfung funktioniert nicht.


```
public boolean hatNochElement() {
        return meineZeichenkette.charAt(pos) > 0 ? true : false;
    }
```

Die mal bitte korrigieren


----------



## DATake (12. Jan 2013)

Danke für die Antwort. Ich habe mehrere Varianten ausprobiert. Ich habe alllerdings keine Möglichkeit gefunden die while Schleife zu beenden. Z.B.



```
public boolean hatNochElement() {
		if (meineZeichenkette.lastIndexOf(meineZeichenkette)==-1)
			return false;
		else
			return true;
```


----------



## DATake (13. Jan 2013)

Hat jemand noch eine Idee. Ich hab gefühlte hundert verschiedene Anweisungen probiert. Ich möchte ja keine Lösung hier einfach nur einen kleinen Tip.


----------



## JCODA (13. Jan 2013)

```
public boolean hatNochElement() {
        return meineZeichenkette.length()>pos;
    }
```


----------



## DATake (13. Jan 2013)

Danke für deine schnelle Antwort. Die Anweisung habe ich am Anfang versucht nur mit dem < Zeichen:bloed: . Wahnsinn was ich alles versucht habe.


----------



## JCODA (13. Jan 2013)

DATake hat gesagt.:


> Danke für deine schnelle Antwort. Die Anweisung habe ich am Anfang versucht nur mit dem < Zeichen:bloed: . Wahnsinn was ich alles versucht habe.



Programmieren ist nicht Ausprobieren! 

Wenn pos<meineZeichenkette.length(), dann gibts noch weitere Stellen, 
wenn pos>=meineZeichenkette.length(), dann gibts eben keine mehr.


----------

