Bagaimana cara membagi string di J2ME?


person Spoike    schedule 14.10.2008    source sumber
comment
Sedikit catatan tambahan, tidak membantu dengan J2ME, tetapi mungkin membantu orang lain di masa depan... Sayangnya, StringTokenizer sudah tidak digunakan lagi di J2SE. Penggantian yang disarankan adalah dengan menggunakan metode pemisahan String saja. Agak disayangkan, StringTokenizer dibuat untuk beberapa kode yang bagus dan apik. Mengubahnya menjadi hanya menggunakan metode pemisahan String akan membuat kode menjadi lebih kikuk. Tampaknya itu adalah cara Java, hentikan fitur-fitur bagus dan suruh orang-orang untuk menggunakan fitur-fitur yang kikuk saja.   -  person Brian Knoblauch    schedule 27.07.2010


Jawaban (8)


Ada beberapa implementasi kelas StringTokenizer untuk J2ME. Yang ini oleh Ostermiller kemungkinan besar akan menyertakan fungsi yang Anda perlukan

Lihat juga halaman ini di Pemberhentian Pemrograman Seluler untuk mengetahui beberapa hal modifikasi dan contoh berikut:

String firstToken;
StringTokenizer tok;

tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
person Jonas Pegerfalk    schedule 14.10.2008

Tidak ada metode bawaan untuk memisahkan string. Anda harus menulisnya sendiri menggunakan String.indexOf() dan String.substring(). Tidak sulit.

person Guido    schedule 14.10.2008
comment
Ya, tapi apakah ini akan efektif dalam mengingat? String.substring() akan membuat string baru, yang akan memakan memori hingga sampah terkumpul. - person Spoike; 14.10.2008
comment
StringTokenizer.nextToken() berisi return string.subString(...) secara internal jadi menurut saya keadaan Anda tidak akan lebih buruk... - person Cowan; 14.10.2008
comment
Substring menggunakan konstruk pribadi untuk String yang berbagi array char (yang tidak dapat diubah), jadi ya - ini akan hemat memori. - person ddimitrov; 14.10.2008

String.split(...) tersedia di J2SE, tetapi tidak di J2ME.
Anda diharuskan menulis algoritma Anda sendiri: postingan terkait dengan contoh solusi.

person Llyle    schedule 14.10.2008

Saya harap ini akan membantu Anda... Ini adalah implementasi saya sendiri yang saya gunakan dalam aplikasi saya. Tentu saja hal ini masih bisa dioptimalkan. saya hanya tidak punya waktu untuk melakukannya... dan juga, saya sedang mengerjakan StringBuffer di sini. Cukup refaktorisasi ini agar dapat menggunakan String sebagai gantinya.

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;
}
person demotics2002    schedule 27.07.2010
comment
btw, berikut cara menggunakan kodenya... String[] elements = split(new StringBuffer(Hello|World), |); atau String[] elemen = split(new StringBuffer(HelloblahWorld), bla); keduanya kembali {Halo, Dunia} - person demotics2002; 27.07.2010

Itu tergantung pada apa sebenarnya yang ingin Anda capai, tetapi fungsinya String.substring() akan ada di suatu tempat:

String myString = "Hello World";

Ini akan mencetak substring mulai dari indeks 6 hingga akhir string:

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

Ini akan mencetak substring mulai dari indeks 0 hingga indeks 5:

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

Output dari semua kode di atas:

World
Hello

Gabungkan ini dengan fungsi String lainnya (indexOf().dll.) untuk mencapai efek yang diinginkan!

Membaca ulang pertanyaan Anda, sepertinya Anda sedang mencari String.split(). Ini akan membagi string input Anda menjadi array string berdasarkan regex yang diberikan:

String myString = "Hi-There-Gang";

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

Ini akan menghasilkan array splitStrings yang berisi tiga string, "Hi", "There" dan "Gang".

Membaca ulang pertanyaan Anda lagi, String.split tidak tersedia di J2ME, tetapi efek yang sama dapat dicapai dengan substring dan indexOf.

person Rob Bell    schedule 14.10.2008

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
     }

Anda dapat menggunakan metode ini untuk memisahkan pembatas.

person Rahul    schedule 25.09.2012

Di J2ME tidak ada pemisahan, tetapi Anda dapat menggunakan kode ini untuk pemisahan. Kode ini hanya berfungsi dengan 1 pembatas simbol!!! Gunakan NetBeans.File\Create Project\ Java ME\ MobileApplication\Set nama proyek(split)\Set tanda centang.Hapus semua kode di (Midlet.java) Anda.Salin kode ini dan tempel di (Midlet.java) Anda.

//IDE NetBeans 7.3.1
//author: UserSuperPupsik 
//email: [email protected]



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) {
    }




}

Elemen yang dipisahkan terletak dalam larik yang disebut (keluar). Misalnya keluar[1]:Halo. Semoga beruntung!!!

person UserSuperPupsik    schedule 29.09.2013

Solusi alternatif lain:

 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;
 }
person Miguel Rivero    schedule 19.08.2014