ฉันจะแยกสตริงใน J2ME ได้อย่างไร


person Spoike    schedule 14.10.2008    source แหล่งที่มา
comment
หมายเหตุด้านข้างเล็กน้อย ไม่ได้ช่วยอะไรกับ J2ME แต่อาจช่วยเหลือผู้อื่นได้ในอนาคต... น่าเสียดายที่ StringTokenizer เลิกใช้แล้วใน J2SE การแทนที่ที่แนะนำคือเพียงใช้วิธีแยกสตริง ค่อนข้างโชคร้ายที่ StringTokenizer สร้างขึ้นเพื่อโค้ดที่สวยงาม การเปลี่ยนไปใช้วิธีแยกสตริงจะทำให้โค้ดดูหนาขึ้น นั่นดูเหมือนจะเป็นวิธีของ Java เลิกใช้คุณสมบัติที่ดีและบอกให้ผู้คนใช้คุณสมบัติที่เทอะทะแทน   -  person Brian Knoblauch    schedule 27.07.2010


คำตอบ (8)


มีการใช้งานคลาส StringTokenizer สำหรับ J2ME บางประการ อันนี้โดย Ostermiller มักจะรวมฟังก์ชันที่คุณต้องการไว้ด้วย

ดูเพิ่มเติมที่ หน้านี้เกี่ยวกับ Mobile Programming Pit Stop สำหรับบางส่วน การแก้ไขและตัวอย่างต่อไปนี้:

String firstToken;
StringTokenizer tok;

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

ไม่มีวิธีการแยกสตริงในตัว คุณต้องเขียนด้วยตนเองโดยใช้ String.indexOf() และ String.substring() ไม่ยาก.

person Guido    schedule 14.10.2008
comment
ใช่ แต่มันจะมีประสิทธิภาพในการจำหรือไม่? String.substring() จะสร้างสตริงใหม่ซึ่งจะกักเก็บหน่วยความจำจนกว่าจะรวบรวมขยะ - person Spoike; 14.10.2008
comment
StringTokenizer.nextToken() มี return string.subString(...) ภายใน ดังนั้นฉันไม่คิดว่าคุณจะแย่ไปกว่านี้อีกแล้ว... - person Cowan; 14.10.2008
comment
Substring ใช้โครงสร้างส่วนตัวสำหรับ String ซึ่งแชร์อาร์เรย์ถ่าน (ไม่เปลี่ยนรูป) ดังนั้นใช่ - มันจะมีประสิทธิภาพหน่วยความจำ - person ddimitrov; 14.10.2008

String.split(...) มีอยู่ใน J2SE แต่ไม่ใช่ J2ME
คุณจะต้องเขียนอัลกอริทึมของคุณเอง: โพสต์ที่เกี่ยวข้องกับโซลูชันตัวอย่าง

person Llyle    schedule 14.10.2008

ฉันหวังว่าสิ่งนี้จะช่วยคุณได้... นี่คือการใช้งานของฉันเองที่ฉันใช้ในแอปพลิเคชันของฉัน แน่นอนว่าสิ่งนี้ยังคงสามารถปรับให้เหมาะสมได้ ฉันไม่มีเวลาทำ...และฉันกำลังทำงานกับ StringBuffer ที่นี่ด้วย เพียงปรับโครงสร้างใหม่เพื่อให้สามารถใช้ String แทนได้

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
อย่างไรก็ตาม นี่คือวิธีที่คุณสามารถใช้โค้ดได้... String[] element = split(new StringBuffer(Hello|World), |); หรือองค์ประกอบ String[] = split (StringBuffer ใหม่ (HelloblahWorld), blah); ทั้งสองส่งคืน {Hello, World} - person demotics2002; 27.07.2010

ขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุผลสำเร็จ แต่ฟังก์ชัน String.substring() จะอยู่ที่นั่นที่ไหนสักแห่ง:

String myString = "Hello World";

สิ่งนี้จะพิมพ์สตริงย่อยโดยเริ่มจากดัชนี 6 ถึงจุดสิ้นสุดของสตริง:

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

สิ่งนี้จะพิมพ์สตริงย่อยโดยเริ่มจากดัชนี 0 ถึงดัชนี 5:

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

ผลลัพธ์ของโค้ดทั้งหมดด้านบน:

World
Hello

รวมสิ่งนี้เข้ากับฟังก์ชัน String อื่นๆ (indexOf() ฯลฯ) เพื่อให้ได้เอฟเฟกต์ที่ต้องการ!

เมื่ออ่านคำถามของคุณอีกครั้ง ดูเหมือนว่าคุณอาจกำลังมองหา String.split() สิ่งนี้จะแยกสตริงอินพุตของคุณออกเป็นอาร์เรย์ของสตริงตาม regex ที่กำหนด:

String myString = "Hi-There-Gang";

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

ซึ่งจะส่งผลให้อาร์เรย์ splitStrings มีสามสตริง "Hi", "There" และ "Gang"

อ่านคำถามของคุณอีกครั้ง String.split ไม่มีใน J2ME แต่สามารถทำได้ด้วย substring และ 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
     }

คุณสามารถใช้วิธีนี้เพื่อแยกตัวคั่นได้

person Rahul    schedule 25.09.2012

ใน J2ME ไม่มีการแยก แต่คุณสามารถใช้รหัสนี้เพื่อแยกได้ รหัสนี้ใช้งานได้กับตัวคั่น simbol เพียง 1 ตัวเท่านั้น !!! ใช้ NetBeans.File\Create Project\ Java ME\ MobileApplication\Set เครื่องหมายถูกลบโค้ดทั้งหมดใน (Midlet.java) คัดลอกโค้ดนี้และวางใน (Midlet.java) ของคุณ

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




}

องค์ประกอบที่แยกอยู่ในอาร์เรย์ที่เรียกว่า (ออก) สำหรับตัวอย่างออก [1]: สวัสดี ขอให้โชคดี!!!

person UserSuperPupsik    schedule 29.09.2013

ทางเลือกอื่น:

 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