# Fehler: String index out of range:7



## StupidAttack (21. Apr 2010)

Hallo alle zusammen!

Der folgende Quellcode lässt sich fehlerfrei compilieren, doch beim ausführen meldet java folgende Fehlermedlung: Exception in thread "main" java.lang.StringIndexOutOfBoundsException:String Index out of range:7.

Ich fand heraus, dass die System.out.println Methode innerhalb des Strings die richtigen Werte ausgibt,doch wenn ich am Ende der Schleife die Länge der Einzelnen Namen ausgebne möchte erscheint die oben erwähnte Fehlermeldung. Ich habe gesucht (auch über Google), fand ähnliche Probleme doch konnte keine Lösung finden. Wahrscheinlich ist es ein völlig trivialer Fehler (Zum beispiel String Länge negativer Wert)...Für Tipps wäre ich sehr dankbar...

hier der Code:

```
import java.io.*; 


class Namen 
{ 
	public static void main ( String[] args )
                               throws IOException, StringIndexOutOfBoundsException


	{
		BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
		String Einlesen;
	

		int zaehler = 0;
		
		int laengeV = 0;
		
	
		System.out.println("Geben sie ihren Namen ein");
		Einlesen = stdin.readLine();
			
		Einlesen = Einlesen.trim();

		while ( (Einlesen.length()) >= zaehler)

		{

		char finden = Einlesen.charAt(zaehler);

			
		if ( finden==' ')
		laengeV = laengeV + zaehler;


		zaehler++;
		}

		System.out.println("Die Laenge des Vornamens betraegt"+laengeV);


	}
}
```

Mit freundlichen Grüssen


----------



## Murray (21. Apr 2010)

charAt funktioniert 0-basiert; str.charAt(0) ist also das erste, str.charAt( str.length()-1) das letzte Zeichen


----------



## Christoph.R (21. Apr 2010)

Ums noch ein wenig konkreter auszudrücken,
liegt der Fehler in der Bedingung der while-Schleife

Richig sollte sein:

while ( (Einlesen.length()-1) >= zaehler)


----------



## StupidAttack (21. Apr 2010)

...essensbedingte Pause...

jedenfalls: Dankeschön euch beiden!

funktioniert ausgezeichnet...

ps: immerhin wars nur nen fehler, verursacht durch ne wissenlücke und nicht durch falsche logik...


----------



## Tomate_Salat (21. Apr 2010)

StupidAttack hat gesagt.:


> ps: immerhin wars nur nen fehler, verursacht durch ne wissenlücke und nicht durch falsche logik...



Merk dir einfach: Der Computer fängt bei 0 an zu zählen, nicht wie der Mensch erst bei 1. Sonst begegnet dir das Phenomen hier noch öfters ;-)


----------



## agent0013 (21. Feb 2011)

Hallo,

ich habe fast das gleiche Thema,aber in meiner aufgabe wird nicht die länge gesucht,sondern wenn der anwender vor- und nachname eingibt, Vorname, so wie er eingegeben wurde, ausgibt und den Nachnamen in Großbuchstaben ausgibt.

dafür muss ich die Methoden:
    * public char charAt(int index)
    * public String substring( int startIndex ) bzw.
    * public String substring( int startIndex, int endIndex ) 

benutzen..

ich sitze seit 3 stunden hier,aber hab keine ahnung wie es geht.
Für Tipps wäre ich auch sehr dankbar.

mfg


----------



## xehpuk (21. Feb 2011)

Weißt du denn, was die drei Operationen machen? Wenn ja, versuch sie mal kurz zu beschreiben.
Die andere Frage ist, wie der Name eingegeben werden soll. Vorname[Leerzeichen]Nachname? Da wirds problematisch, zu unterscheiden, was Vor- und was Nachname ist, schließlich kann man mehrteilige Vor- und Nachnamen haben (z. B. "Karl Theodor Maria Nikolaus Johann Jacob Philipp Franz Joseph Sylvester Freiherr von und zu Guttenberg"; höhö, den Namen einfach ohne Quellenangabe kopiert ).


----------



## agent0013 (21. Feb 2011)

:lol:  nein,so große name muss ich nicht angeben.. 
die ausgabe sieht so aus:

Geben Sie Ihren Namen ein:
Sherlock Holmes

Sherlock HOLMES

was operationen betrifft,ich weiß was substring( int startIndex ) bzw. 
substring( int startIndex, int endIndex ) machen,was charAt(int index) macht weiß ich auch ungefähr aber wie ich das im meinem programm benutze,weiß ich nicht... ???:L


----------



## agent0013 (21. Feb 2011)

wäre z.b. so was richtig:


```
System.out.println("Geben Sie Ihren Namen ein: ");
	name = stdin.readLine();
		
	char finden = name.charAt(zaehler);
			
	if (finden == ' ')
	{
		String sub = name.substring(0, finden);
		String sub1 = name.substring((finden + 1), name.length());
		String name1 = sub + sub1.toUpperCase();
		System.out.println(name1);
	}
```


----------



## Murray (21. Feb 2011)

Du brauchst eine Schleife, die zaehler solange erhöht, bis ein Leerzeichen gefunden wurde (oder der String zuende ist). Und in den substring-Anweisungen muss nicht das Zeichen, sondern die Position des Zeichens (also zaehler) als Index eingesetzt werden.


----------



## agent0013 (21. Feb 2011)

es hat geklappt!! danke! :toll::toll:


----------

