سؤال

وكيف يمكنني تقسيم السلاسل في J2ME بطريقة فعالة؟

وهناك StringTokenizer أو String.split(String regex) في الطبعة القياسية (J2SE)، ولكنها غائبة في الطبعة الدقيقة (J2ME، MIDP).

هل كانت مفيدة؟

المحلول

وهناك عدد قليل من التطبيقات من فئة StringTokenizer لJ2ME. هذا واحد من قبل Ostermiller ستتضمن على الأرجح وظيفة تحتاج

وانظر أيضا هذه الصفحة على البرمجة موبايل حفرة توقف لبعض التعديلات والمثال التالي:

String firstToken;
StringTokenizer tok;

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

نصائح أخرى

لا يوجد أي بني في طريقة لتقسيم السلاسل. لديك لكتابة ذلك بنفسك باستخدام String.indexOf() وString.substring(). ليس من الصعب.

وآمل أن يكون هذا واحد سوف تساعدك على ... هذا هو تنفيذ بلدي أنا استخدم في طلبي. بالطبع هذا لا يزال من الممكن الأمثل. أنا فقط لم يكن لديك الوقت للقيام بذلك ... وأيضا، وأنا أعمل على StringBuffer هنا. فقط ريفاكتور هذا لتكون قادرة على استخدام سلسلة بدلا من ذلك.

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;
}

وهذا يعتمد على بالضبط ما تريد تحقيقه، ولكن سوف String.substring وظيفة () أن يكون في مكان ما هناك:

String myString = "Hello World";

وهذا سوف طباعة فرعية بدءا من مؤشر 6 إلى نهاية السلسلة:

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

وهذا سوف طباعة فرعية بدءا من مؤشر 0 حتى المؤشر 5:

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

وإخراج كافة التعليمات البرمجية أعلاه:

World
Hello

والجمع بين هذا مع وظائف سلسلة أخرى (indexOf(). الخ) لتحقيق التأثير المطلوب!

وإعادة قراءة سؤالك، يبدو كما لو كنت قد قد تبحث عن String.split(). وهذا تقسيم سلسلة الإدخال الخاص بك إلى مجموعة من السلاسل على أساس التعابير المنطقية معينة:

String myString = "Hi-There-Gang";

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

وهذا سيؤدي إلى مجموعة splitStrings يحتوي على ثلاثة سلسلة، "Hi"، "There" و"Gang".

والسؤال مرة أخرى القراءة ري، String.split غير متوفرة في J2ME، ولكن التأثير نفسه يمكن أن يتحقق مع substring وindexOf.

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
     }

ويمكنك استخدام هذا الأسلوب لتقسيم محدد.

في J2ME لا انقسام، ولكن يمكنك استخدام هذا الرمز لsplit.This يعمل الرمز مع فقط محدد 1 simbol !!! استخدام NetBeans.File \ إنشاء مشروع \ جافا ME \ تطبيق الجوال \ تعيين اسم المشروع (تقسيم) \ مجموعة checkmark.Delete كافة التعليمات البرمجية الخاصة بك في (Midlet.java) .Copy هذا الرمز والماضي في حياتك (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) {
    }




}

وعناصر splited وتقع في مجموعة تسمى (الخروج). للحصول على مثال من [1]: مرحبا. حظا سعيدا!

وحل بديل آخر:

 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;
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top