문제

J2ME에서 문자열을 효과적으로 분할하려면 어떻게 해야 합니까?

이있다 StringTokenizer 또는 String.split(String regex) Standard Edition(J2SE)에는 없지만 Micro Edition(J2ME, MIDP)에는 없습니다.

도움이 되었습니까?

해결책

J2ME에 대한 StringTokenizer 클래스의 몇 가지 구현이 있습니다. 이거 하나 Ostermiller 필요한 기능을 포함 할 가능성이 높습니다

또한보십시오 모바일 프로그래밍 피트 스톱 의이 페이지 일부 수정 및 다음 예제.

String firstToken;
StringTokenizer tok;

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

다른 팁

There is no built in method to split strings. You have to write it on your own using String.indexOf() and String.substring(). Not hard.

string.split (...)는 j2se에서 사용할 수 있지만 j2me는 아닙니다.
자신의 알고리즘을 작성해야합니다. 샘플 솔루션과 관련된 게시물.

이것이 당신에게 도움이 되기를 바랍니다...이것은 내 응용 프로그램에서 사용한 내 구현입니다.물론 이것은 여전히 ​​최적화될 수 있습니다.그냥 할 시간이 없어...그리고 저는 여기서 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;
}

이는 정확히 달성하려는 내용에 따라 다르지만 함수 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("-");

이로 인해 3 개의 문자열이 포함 된 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에서는 분할이 없지만이 코드를 분할에 사용할 수 있습니다.이 코드는 단 1 simbol delimiter에서만 작동합니다 !!! NetBeans.file Create Project Java Me MobiEleapplication Set Project Name (Split) Set Checkmark.Delete (Midlet.java)의 모든 코드를 사용하고 (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) {
    }




}

배열에 위치한 스플레이트 요소는 (out)라고 불렀습니다. 예를 들어 [1] : hello. 행운을 빕니다!!!

또 다른 대안 솔루션 :

 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