Frage

Wie kann ich geteilt Strings in J2ME in einer effektiven Art und Weise?

Es gibt eine StringTokenizer oder String.split(String regex) in der Standard Edition (J2SE), aber sie sind abwesend in der Micro Edition (J2ME MIDP).

War es hilfreich?

Lösung

Es gibt einige Implementierungen einer Klasse StringTokenizer für J2ME. Dieses von Ostermiller höchstwahrscheinlich auch die Funktionalität, die Sie benötigen

Siehe auch diese Seite auf Mobil Programmierung Pit Stop für einige Modifikationen und dem folgenden Beispiel:

String firstToken;
StringTokenizer tok;

tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();

Andere Tipps

Es gibt keine Methode gebaut Strings aufzuteilen. Sie haben zu schreiben, es auf eigene Faust mit String.indexOf() und String.substring(). Nicht schwer.

String.split (...) ist in J2SE verfügbar, aber nicht J2ME.
Sie sind verpflichtet, Ihren eigenen Algorithmus zu schreiben. verwandte Post mit Probenlösung

Ich hoffe, dies wird Ihnen helfen ... Das ist meine eigene Implementierung ist i in meiner Anwendung verwendet. Natürlich kann dies noch optimiert werden. Ich habe einfach keine Zeit, es zu tun ... und auch, ich arbeite hier String. Nur Refactoring dieser Zeichenfolge in der Lage sein, anstatt zu verwenden.

public static String[] split(StringBuffer sb, String splitter){
    String[] strs = new String[sb.length()];
    int splitterLength = splitter.length();
    int initialIndex = 0;
    int indexOfSplitter = indexOf(sb, splitter, initialIndex);
    int count = 0;
    if(-1==indexOfSplitter) return new String[]{sb.toString()};
    while(-1!=indexOfSplitter){
        char[] chars = new char[indexOfSplitter-initialIndex];
        sb.getChars(initialIndex, indexOfSplitter, chars, 0);
        initialIndex = indexOfSplitter+splitterLength;
        indexOfSplitter = indexOf(sb, splitter, indexOfSplitter+1);
        strs[count] = new String(chars);
        count++;
    }
    // get the remaining chars.
    if(initialIndex+splitterLength<=sb.length()){
        char[] chars = new char[sb.length()-initialIndex];
        sb.getChars(initialIndex, sb.length(), chars, 0);
        strs[count] = new String(chars);
        count++;
    }
    String[] result = new String[count];
    for(int i = 0; i<count; i++){
        result[i] = strs[i];
    }
    return result;
}

public static int indexOf(StringBuffer sb, String str, int start){
    int index = -1;
    if((start>=sb.length() || start<-1) || str.length()<=0) return index;
    char[] tofind = str.toCharArray();
    outer: for(;start<sb.length(); start++){
        char c = sb.charAt(start);
        if(c==tofind[0]){
            if(1==tofind.length) return start;
            inner: for(int i = 1; i<tofind.length;i++){ // start on the 2nd character
                char find = tofind[i];
                int currentSourceIndex = start+i;
                if(currentSourceIndex<sb.length()){
                    char source = sb.charAt(start+i);
                    if(find==source){
                        if(i==tofind.length-1){
                            return start;
                        }
                        continue inner;
                    } else {
                        start++;
                        continue outer;
                    }
                } else {
                    return -1;
                }

            }
        }
    }
    return index;
}

Das hängt davon ab, was genau wollen Sie erreichen, aber die Funktion String.substring () wird dort irgendwo sein:

String myString = "Hello World";

Dies wird den Teil Druck aus dem Index ab dem 6. bis zum Ende der Zeichenfolge:

System.out.println(myString.substring(6));

Dies wird den Teil Druck aus dem Index beginnend 0 bis Index 5:

System.out.println(myString.substring(0,5));

Ausgabe aller Code oben:

World
Hello

In Kombination mit den anderen String-Funktionen (indexOf(). Usw.), um den gewünschten Effekt zu erzielen!

Re-Lektüre Ihrer Frage, es sieht aus, als ob Sie für String.split() gesucht haben kann. Dies wird Ihre Eingabezeichenfolge in ein Array von Strings basierend auf einem gegebenen Regex aufgeteilt:

String myString = "Hi-There-Gang";

String[] splitStrings = myString.split("-");

Dies wird in der splitStrings Array führen, die drei Zeichenfolge, "Hi", "There" und "Gang".

Re-Lektüre Ihrer Frage wieder, ist String.split in J2ME nicht verfügbar, aber die gleiche Wirkung kann mit substring und indexOf erreicht werden.

public static Vector splitDelimiter(String text, char delimiter) {
    Vector splittedString = null;
    String text1 = "";

    if (text != null) {
        splittedString = new Vector();
        for (int i = 0; i < text.length(); i++) {
            if (text.charAt(i) == delimiter) {
                splittedString.addElement(text1);
                text1 = "";
            } else {
                text1 += text.charAt(i);
                // if(i==text.length()-1){
                // splittedString.addElement(text1);
                // }
            }
        }
        splittedString.addElement(text1);
    }
    return s
     }

Sie können diese Methode verwenden, um ein Trennzeichen aufgeteilt wird.

In J2ME keine Spaltung, aber Sie diesen Code für split.This Code funktioniert mit nur 1 simbol Trennzeichen verwenden !!! Verwenden Sie NetBeans.File \ Projekt erstellen \ Java ME \ Mobileapplication \ Set Projektnamen (split) \ Set checkmark.Delete alle Code in Ihre (Midlet.java) .Copy dieser Code und Vergangenheit in Ihrem (Midlet.java).

//IDE NetBeans 7.3.1
//author: UserSuperPupsik 
//email: usersuperpupsik@gmail.com



package split;


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.Vector;

public class Midlet extends MIDlet {
 public String e1;
    public Vector v=new Vector();
 public int ma;
 int IsD=0;
 int vax=0;
 public String out[];
 private Form f;

 public void split0(String text,String delimiter){
                            if (text!=""){
                            IsD=0;

                            int raz=0;

                            //v.removeAllElements();
                            v.setSize(0);
                            int io;
                            String temp=""; 
                             int ni=(text.length()-1);


                             for(io=0;io<=ni;io++){

                                    char ch=text.charAt(io);
                                    String st=""+ch;                                    
                                    if(io==0 && st.equals(delimiter)){IsD=1;}

                                    if(!st.equals(delimiter)){temp=temp+st;} //Not equals (!=)
                                    else if(st.equals(delimiter)&&temp!="")//equals (==)
                                                                {
                                    IsD=1;
                                    //f.append(temp);   
                                    v.addElement(temp);
                                    temp="";                   

                                                                 }


                                     if(io==ni && temp!="") {
                                              v.addElement(temp);
                                              temp="";  
                                              }           

                                     if((io==ni)&&IsD==0&&temp!=""){v.addElement(temp);}




                                            }



                                       if(v.size()!=0){

                                       ma=(v.size());

                                       out=new String[ma];


                                       v.copyInto(out);

                                       }
                                       //else if(v.size()==0){IsD=1; }


                            }
                                 }


public void method1(){
    f.append("\n");
    f.append("IsD: " +IsD+"");
    if (v.size()!=0){
    for( vax=0;vax<=ma-1;vax++){
                                f.append("\n");

                                f.append(out[vax]);


                                    }
                          }  
}
    public void startApp() {

    f=new Form("Hello J2ME!");
    Display.getDisplay(this).setCurrent(f);

    f.append("");
    split0("Hello.World.Good...Luck.end" , ".");
    method1();

    split0(".",".");
    method1();

    split0("   First WORD2 Word3 "," ");
    method1();

    split0("...",".");
    method1();            
                                                }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }




}

Geteilte-Elemente in einem Array angeordnet genannt (out) .Für Beispiel aus [1]: Hallo. Viel Glück !!!

Eine weitere alternative Lösung:

 public static Vector split(String stringToSplit, String separator){
     if(stringToSplit.length<1){
         return null;
     }

     Vector stringsFound = new Vector();

     String remainingString = stringToSplit;

     while(remainingString.length()>0){
         int separatorStartingIndex = remainingString.indexOf(separator);

         if(separatorStartingIndex==-1){
             // Not separators found in the remaining String. Get substring and finish
             stringsFound.addElement(remainingString);
             break;
         }

         else{
             // The separator is at the beginning of the String,
             // Push the beginning at the end of separator and continue
             if(remainingString.startsWith(separator)){
                 remainingString = remainingString.substring(separator.length());
             }
             // The separator is present and is not the beginning, add substring and continue
             else{
                 stringsFound.addElement(remainingString.substring(0, separatorStartingIndex));
                 remainingString = remainingString.substring(separatorStartingIndex + separator.length());
             }
         }
     }

     return stringsFound;
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top