Problem beim Splitten eines Strings

AnonymXX

Mitglied
Hallo,

ich bin ein Anfänger in der Java- Programmierung und habe für das Studium die Aufgabe, eine Applikation mit JavaME zu schreiben.
Ich muss einen String, den mir ein Server sendet, zuerst nach "$" und dann nach "," aufsplitten und die einzelnen Teilstrings dann in ein zweidimensionales Array speichern.
Den Quellcode habe ich soweit. Ich splitte erst nach "$" in einer While- Schleife und dann in einer inneren While- Schleife nach ",". Die innere Schleife funktioniert, aber die äußere wird (scheinbar) nur einmal durchlaufen Durch Debugging- Versuche mit NetBeans ist meine Vermutung, dass der Code nach Verlassen der inneren Schleife beendet wird.
Daher ergeben Aufrufe des Arrays in Form von "splittArray[1][0] eine Nullpointer Exception.

Kann mir bei meinem Problem jemand helfen? Ich brauche diese Funktionalität sehr dringend, da ich die Applikation bald an der Hochschule abgeben muss.

Der String, den ich splitten möchte, sieht z.B. so aus: <html><body>$Part11,Part12,Part13,Part14$Part21,Pa rt22,Part23,Part24$Part31,Part32,Part33,Part34$</body></html>

Mein Code hierfür ist:

Java:
public class StringSeparator {
    
    private String name;
    private String strasse;
    
    public String splitArray[][] = new String [20][7];
    public String stringPart = null;
    

    public void parser(String aString)
	{

		int iStart = 0;
		int iEnd = 0;
		int iElementCounter = 0;
                int kStart = 0;
                int kEnd = 0;
                int kElementCounter = 0;
                
		
                int i = aString.indexOf('$',0);
			// take just the part after "<html><br>"
		String myInput = aString.substring(i+1,aString.length());

                
                while (iEnd < myInput.length())
		{
                    iEnd = myInput.indexOf('$', iStart);
                    if (iEnd > 0)
                    {
                        stringPart = myInput.substring(iStart, iEnd);
			iStart = iEnd + 1;
                                
                        do
                        {
                                    
                            kEnd = stringPart.indexOf(',', kStart);
                            if (kEnd >0)
                            {
                                //test = stringPart.substring(kStart, kEnd);
                                splitArray[iElementCounter][kElementCounter]=
                                            stringPart.substring(kStart, kEnd);
                                kStart = kEnd +1;
                                        
                             }
                            else
                            {
                                return;
                            }
                                    
                             kElementCounter = kElementCounter+1;
                             splitArray[iElementCounter][kElementCounter] =
                                stringPart.substring(kStart, stringPart.length());
                             
                          }while (kEnd < stringPart.length());
                          
                          iElementCounter = iElementCounter +1;
                          kEnd =0;
                          kStart=0;
                        }
                        else
                        {
                            return;
                        }
                    
                }
                
                stringPart = myInput.substring(iStart, myInput.length());
                
        }

        public String getArray(){
            return splitArray[0][0];
        }
       
}

Was stimmt hier nicht?

Danke und Lg
 
ich würds so in der Art machen:
Java:
import java.util.ArrayList;
import java.util.List;

public class StringSeparator {
	
	public static String[][] split2d( String input, char primDelim, char secDelim ) {
		String[] tokens = split( input, primDelim );
		String[][] ret = new String[tokens.length][];
		int i = 0;
		for ( String s : tokens )
			ret[i++] = split( s, secDelim );
		return ret;
	}
	
	public static String[] split( String input, char delim ) {
		StringBuilder sb = new StringBuilder();
		List<String> tokens = new ArrayList<String>();
		for ( int i = 0; i < input.length(); i++ ) {
			char current = input.charAt( i );
			if ( current == delim ) {
				tokens.add( sb.toString() );
				sb.setLength( 0 );
			} else {
				sb.append( current );
			}
		}
		tokens.add( sb.toString() );
		String[] ret = new String[tokens.size()];
		return tokens.toArray( ret );
	}
}

Testklasse:
Java:
public class Test {
	public static void main( String[] args ) {
		String input = "<html><body>$Part11,Part12,Part13,Part14$Part21,Part22,Part23,Part24$Part31,Part32,Part33,Part34$</body></html>";
		String[][] tokens = StringSeparator.split2d( input, '$', ',' );
		// Testausgabe
		for ( int i = 0; i < tokens.length; i++ ) {
			for ( int j = 0; j < tokens[i].length; j++ )
				System.out.print( tokens[i][j] + "\t" );
			System.out.print( "\n" );
		}
	}
}

Ausgabe:
Code:
<html><body>	
Part11	Part12	Part13	Part14	
Part21	Part22	Part23	Part24	
Part31	Part32	Part33	Part34	
</body></html>

für den fall, dass du es nicht selbst implementieren musst, nimm (wie musikk schon meinte) String#split
 
Das Problem ist, dass hier ME verwendet wird. Meines Wissens besitzt in der ME String keine Methode split() noch gibt es die Klasse ArrayList oder sonstige Collections. Hab mich allerdings vor Jahren mal mit ME auseinandergesetzt, kann sein, dass sich da was geändert hat.

@AnonymXX: Lass Dir zwischendurch per System.out.println() einzelne Inhalte oder Werte ausgeben bzw. benutzte den Debugger, dann lässt sich leichter feststellen wo was schief läuft.
Da man bei Arrays die Größe zu Beginn festlegen muss würde hier mit Vector arbeiten, das ist ein bisschen flexibler.
 
Durch die returns verlässt Du immer komplett die Methode. Wenn Du nur die jeweilige Schleife beenden willst solltest Du break nutzen.
 
ich habe es hinbekommen🙂 Mit zwei Vektoren, die dann in ein zweidimensionales Array umgewandelt werden, geht es.

Trotzdem danke an alle!

Lg

AnonymXX
 
wenn ME vektoren hat hättest du einfach meinen code nehmen können und die ArrayList durch nen Vektor ersetzen können. aber gut, hast es ja jetzt hinbekommen
 

Zurück
Oben