Announcement

Collapse
No announcement yet.

Problem beim splitten eines Strings

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem beim splitten eines Strings

    Hallo,

    ich schreibe gerade eine Applikation in Java. 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>

    Hier der Quellcode:

    Code:
    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];
            }
           
    }

    Vielen Dank

    Lg

    NewOne

  • #2
    Sowas muss man doch heutzutage nimmer selbst machen

    Dafür gibts:

    http://java.sun.com/j2se/1.4.2/docs/...va.lang.String)

    Also die Funktion Split von String. Damit wird aus:

    "abc:def:ghi"

    mit ":" als regex:

    { "abc", "def", "ghi" }

    Nimmt man denn in Java noch Arrays her? Weiterrechnen würde ich mit so etwas wie einem Set oder ähnlichem... komme aus der .NET Welt und dort würd ich wahrscheinlich eine List<String> verwenden.

    Comment


    • #3
      Hallo fanderlf,

      danke für die schnelle Antwort. Was ich vergessen habe: die Applikation ist JavaME. Da funktioniert Split ja nicht und auch keine Regular Expressions :-(
      Was ein Set ist, weiß ich leider nicht.

      Lg

      NewOne

      Comment


      • #4
        mögliche Lösung

        Code:
        public static void main(String[] args)
            {
            String eingabe="aaa##bbbb##cccc##dddd##eeee##ffff";
            Vector vec=split(eingabe,"##");
            }
        private static Vector split(String eingabe,String delimiter)
            {
            Vector v=new Vector();
            int dellang=delimiter.length();
            int delpos=eingabe.indexOf(delimiter);
            int spos=0;
            while(delpos>0)
                {
                if(delpos-1>0)
                    {
                    v.add(eingabe.substring(spos,delpos));
                    }
                spos=delpos+dellang;
                delpos=eingabe.indexOf(delimiter,delpos+dellang);
                }
            if(delpos<eingabe.length())
                {
                v.add(eingabe.substring(spos));
                }
            return v;
            }
        ergibt

        aaa
        bbbb
        cccc
        dddd
        eeee
        ffff


        EDIT
        Was ein Set ist, weiß ich leider nicht.
        http://openbook.galileodesign.de/jav...8803ea36b94e4f
        Zuletzt editiert von Christian Marquardt; 19.05.2010, 16:14.
        Christian

        Comment


        • #5
          Hallo Christian,

          danke für die Antwort. Dein Code funktioniert und ich habe versucht, die Elemente des Vectors wieder einzulesen, erneut zu teilen und das Ergebnis in einem zweidimensionalen Array zu speichern.
          Funktioniert aber nicht.
          Wie könnte ich das denn machen?

          Lg

          NewOne

          Comment


          • #6
            Funktioniert aber nicht.
            ...ist kein Fehler.

            Da ich nicht weiss wie das Array aufgebaut ist, kann ich nur raten

            Die Elemente des ersten Aufteilens sind die erste Dimension und das zweite Aufteilen wäre die zweite Dimension

            Somit wäre die Rückgabe des ersten Aufteilens in einer Schleife abzuarbeiten und dem Array zuzuordnen. Nach dem zuordenen des einzelnen Elementes das splitten nochmals machen und dieses Ergebnis der zweiten Dimension zuordenen

            SchleifeA
            zuordnen der 1. Dimension
            Wert splitten
            SchleifeB über das 2. Splitten
            zuordnen der 2. Dimension
            ende SchleifeB
            ende SchleifeA
            Christian

            Comment


            • #7
              Ich meinte nur, dass ich es nicht hinbekomme, den Vector in einem Array zu speichern

              Mein Code, um den Vector in ein eindimensionales Array zu speichern:

              Code:
              String []array;
              String element = null;
              int start= 0;
              int index=0;
              
              
              for (int i = 0; i<vector1.size(); i++)
                  {
                      array = new String [10];
                      element = (String)vector1.elementAt(i);
                      index = element.indexOf(',');
                      array[i]= element.substring(start, index);
                      
                  }
              Das funktioniert aber irgendwie nicht.

              Lg

              NewOne

              Comment


              • #8
                Das funktioniert aber irgendwie nicht.
                Toll und?

                Darf man raten was nicht funktioniert?
                Wird eine Exception geworfen?
                Was ergibt ein debuggen?
                Wird der Code nicht compiliert?

                index = element.indexOf(',');
                array[i]= element.substring(start, index);

                Was sollte dieser Code bewirken?

                Etwa das nochmalige splitten?

                Warum macht man sich eigentlich die Mühe etwas zu schreiben, wenn es ignoriert wird?

                Was war an obigen Pseudocode unklar?

                Warum fängst du an, das zweite Splitten wieder per Hand zumachen, anstatt die splitt-Funktion zu nutzen und dir einen 2. vector liefern zu lassen?


                EDIT
                , um den Vector in ein eindimensionales Array zu speichern:
                Warum denn nun eindimensional?? Denke es soll 2-dim. sein?
                Zuletzt editiert von Christian Marquardt; 19.05.2010, 18:07.
                Christian

                Comment


                • #9
                  Hallo Christian,

                  tut mir leid... es wird eine StringIndexOutOfBoundsException geworfen.
                  Ich sitze jetzt schon seit zwei Tagen an der Funktionalität und kriege es einfach nicht hin.
                  Das einzige, was ich brauche, ist irgendwas, um den String zweimal zu splitten, nach $ und nach ,. Und das Ergebnis dann sinnvoll pro Zeile in eine URL eintragen zu können.

                  Ich komme gerade nicht drauf, wie ich das mit deinem Code machen kann....

                  Ich meinte ein zweidimensionales Array... Wenn du aber eine andere, einfachere Lösung hast, würde ich mich sehr freuen, wenn du es mir sagst.

                  Danke und Lg

                  NewOne

                  Comment


                  • #10
                    Code:
                    public static void main(String[] args)
                        {
                        String[][] ergebnis=new String[100][100];
                        //Der String soll erst nach ## und dann nach , gesplittet werden
                        String eingabe="aa,aa##bb,bb##cc,cc##dd,dd##ee,ee##ff,ff";
                        Vector vec1=split(eingabe,"##");
                        for(int i=0;i<vec1.size();i++)
                            {
                            ergebnis[i][0]=(String)vec1.elementAt(i);
                            Vector vec2=split((String)vec1.elementAt(i),",");
                            for(int j=0;j<vec2.size();j++)
                                {
                                ergebnis[i][j+1]=(String)vec2.elementAt(j);
                                }
                            }
                      
                        }
                    Da du ja nicht beschreiben kannst, wie das Array aufgebaut werden soll. Eine mögliche Lösung. Es lässt sich auch anders gruppieren
                    Christian

                    Comment


                    • #11
                      Hallo Christian,

                      ich habe jetzt alles ausprobiert, was du geschrieben hast.... Es klappt :-) und macht das, was ich brauche.

                      Vielen Dank!

                      Lg

                      NewOne

                      Comment

                      Working...
                      X