Java Split String: Ab einer gewissen länger erhalte ich ein "out of Bounds"

Sapor2211

Cadet 4th Year
Registriert
Dez. 2013
Beiträge
82
Hallo zusammen,
Ich bin noch relativ Frisch in der Java Programmierung und komme momentan an meine Grenze.

Ich programmieren z.Z. an einem Tool der u.a. einen vorgegebenen String abwandeln soll, sodass mit diesem weitergearbeitet werden kann.

Vorgabe:
6126 VK6126
6202 VK6202
6108 VK6108
6019 VK6019
601A VK601A
6100 VK6100
6127 VK6127
611A VK611A
6114 VK6114
6210 VK6210
6102 VK6102
6204 VK6204
6101 VK6101
6116 VK6116
6124 VK6124
6011 VK6011
6034 VK6034
6035 VK6035
6036 VK6036
6037 VK6037
6038 VK6038

Für die Verarbeitung werden nur die ersten 4 Zeichen (oder letzten wie man es sieht..) benötigt. Mit diesem wird dann ein String Kommando zusammengebastelt:

MVS RO *ALL,V (6126,6202,6108,6019,601A,6100,6127,611A,6114,6210),ONLINE


Den Text gibt der Benutzer über ein JTextField in der GUI Klasse ein. Dieser wird an die Adressen Klasse bzw an die Methode AdressenOnline übergeben.

Die Anzahl der Adressen (z.B. ist 6037 VK6037 ist genau eine Adresse) ist Variabel. Mal sind es nur 1-2, mal 20 oder mehr.

Das sieht dann so aus: cbbild.png

Bis 20 Adressen klappt das auch wunderbar.

Da ein String in seine Länge ja vermutlich begrenzt ist, habe ich eine Methode geschrieben die ab 20 Adressen arbeiten soll.

Und genau da liegt das Problem. Wenn ich über 20 Adressen eingebe (Also Aufruf public static void SplittAdressenOn) bekomme ich ein Fehler:

java.lang.ArrayIndexOutOfBoundsException: 22
(Adressen.java:100)
Die Zeile Verweißt auf:
SubStrAdressenTemp1+=SubStrAdressen1;


Der Fehler heißt soviel wie: Der Index also i, ist außerhalb seines "Rahmens".

Ich weiß aber nicht wieso...

Hier mein Quellcode, nur die Adressen Klasse. Offline können wir erstmal auseracht lassen.
Code:
package de.MainframeToolPackage;

import javax.swing.JOptionPane;

public class Adressen {
	
	
	
	public static void AdressenOnline(String PullAdressenOnline){
		
//Länge des String ermitteln
	int Strlaenge=PullAdressenOnline.length();
	Strlaenge=Strlaenge/12; // 12= Anzahl Chars im String
	Strlaenge+=1;			//Vermutlich weil er bei 0 Anfängt?!
		
		
	//Init
	String SubStrAdressenTemp1="";
		
		
	//******* Wenn mehr als 20Adressen Splitten!!*******
	if(Strlaenge>20){
			
		Adressen.SplittAdressenOn(PullAdressenOnline,Strlaenge);
			
		}
		
		
	//** der "normale" Fall wenn Adressen kleiner 20***
	else{
		
		 int i=0;
		 int j=0;	//Anzahl Schleifendurchgänge
				
			while(j<Strlaenge){
				String[] SubStrAdressen1=PullAdressenOnline.split("\\s+");//Splitte bei Leerzeichen
				SubStrAdressenTemp1+=SubStrAdressen1[i];	//Nehm den Index 0,2,4,6...
				SubStrAdressenTemp1+=" ";
				if(i==8){					//Nur zur Übersicht
					SubStrAdressenTemp1+="\n";
				}else if(i==18){
					SubStrAdressenTemp1+="\n";}
					i+=2;	//Nur jedenzweiten
					j+=1;
				}
		//**** Ende****************		
				
				
		JOptionPane.showMessageDialog(null, "Das sind deine Adressen\n"+SubStrAdressenTemp1, 
		"Adressen Online Setzen "+Strlaenge, JOptionPane.INFORMATION_MESSAGE);
		}
		
	}
	
	public static void AdressenOffline(String PullAdressenOffline){
		
		int Strlaenge=PullAdressenOffline.length();
		
		int i=0;
		String SubStrAdressenTemp=" ";
		while(i<=Strlaenge){
			String[] SubStrAdressen1=PullAdressenOffline.split("\\s+");	//Splitte bei Leerzeichen
			SubStrAdressenTemp+=SubStrAdressen1[i];		//Nehm den Index 0,2,4,6...
			SubStrAdressenTemp+=" ";
			if(i==8){
				SubStrAdressenTemp+="\n";
			}
			i+=2;	//Nur jedenzweiten
		}
		
		
	JOptionPane.showMessageDialog(null, "Das sind deine Adressen\n"+SubStrAdressenTemp,
	"Adressen Offline Setzen", JOptionPane.INFORMATION_MESSAGE);
	}



	public static void SplittAdressenOn(String GetAdressenLokal,int Strlaenge)
	{
		
		//init
		String SubStrAdressenTemp1="";
		String SubStrAdressenTemp2="";
		
		//Splitten 
		java.lang.String[] split= new String[2];
		split[0]=GetAdressenLokal.substring(0,GetAdressenLokal.length()/2);
		split[1]=GetAdressenLokal.substring(GetAdressenLokal.length()/2);
		
		//************** Teil 1*****************
		int i=0;
		int j=0;
		while(j<Strlaenge){
			String[] SubStrAdressen1=split[0].split("\\s+");//Splitte bei Leerzeichen
			SubStrAdressenTemp1+=SubStrAdressen1[i];		//Nehm den Index 0,2,4,6...
			SubStrAdressenTemp1+=" ";
			if(i==8){										//Nur zur Übersicht
				SubStrAdressenTemp1+="\n";
			}
			i+=2;
			j+=1;
		}
		
		
		//****************** Teil 2**********************
		int k=0;
		int l=0;
		while(l<Strlaenge){
			String[] SubStrAdressen2=split[1].split("\\s+");//Splitte bei Leerzeichen
			SubStrAdressenTemp2+=SubStrAdressen2[k];		//Nehm den Index 0,2,4,6...
			SubStrAdressenTemp2+=" ";
			if(k==8){								//Nur zur Übersicht
				SubStrAdressenTemp2+="\n";
			}
			k+=2;
			l+=1;
			
		}
		
JOptionPane.showMessageDialog(null, "Das sind deine Adressen\n"+SubStrAdressenTemp1+ SubStrAdressenTemp2, 
"Adressen Online Setzen "+Strlaenge, JOptionPane.INFORMATION_MESSAGE);
		
}}
 
Zuletzt bearbeitet: (Quellcode eingerückt)
Dein "i" bezieht sich auf "PullAdressenOnline", nicht auf "SubStrAdressen1", kann mithin also größer sein als "SubStrAdressen1.length".
 
Gelöst! AW: Split String: Ab einer gewissen länger erhalte ich ein "out of Bounds"

Ich habe den Fehler gefunden.

In der Methode "public static void SplittAdressenOn(String GetAdressenLokal,int Strlaenge)"
musste ich die Strlaenge nochmal durch 2 Teilen! Da der String ja auch gehälftet wurde, wird auch nur die halbe Anzahl an Schleifendurchgänge in der While
Code:
while(j<Strlaenge){
			String[] SubStrAdressen1=split[0].split("\\s+");//Splitte bei Leerzeichen
			SubStrAdressenTemp1+=SubStrAdressen1[i];	//Nehm den Index 0,2,4,6...
			SubStrAdressenTemp1+=" ";
			if(i==8){									//Nur zur Übersicht
				SubStrAdressenTemp1+="\n";
			}
			i+=2;
			j+=1;
		}
benötigt.

Danke für den Tipp!
 
Zurück
Oben