Como faço para dividir seqüências em J2ME?

votos
14

Como faço para dividir seqüências em J2ME de forma eficaz?

Há uma StringTokenizerou String.split(String regex)na edição padrão (J2SE), mas eles estão ausentes na Micro Edition (J2ME, MIDP).

Publicado 14/10/2008 em 12:12
fonte usuário
Em outras línguas...                            


8 respostas

votos
11

Existem algumas implementações de uma classe StringTokenizer para J2ME. Este um por Ostermiller provavelmente irá incluir a funcionalidade que você precisa

Veja também esta página em Programação móvel Pit Stop para algumas modificações e exemplo a seguir:

String firstToken;
StringTokenizer tok;

tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
Respondeu 14/10/2008 em 12:57
fonte usuário

votos
3

Espero que este irá ajudá-lo ... Esta é a minha própria implementação i usado em meu aplicativo. Claro que isso ainda pode ser otimizado. i simplesmente não têm tempo para fazê-lo ... e também, eu estou trabalhando em StringBuffer aqui. Apenas refatorar este seja capaz de usar String em vez.

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;
}
Respondeu 27/07/2010 em 13:42
fonte usuário

votos
3

String.split (...) está disponível em J2SE, mas não J2ME.
Você é obrigado a escrever o seu próprio algoritmo: post relacionado com a solução de amostra .

Respondeu 14/10/2008 em 12:51
fonte usuário

votos
3

Não há nenhuma construído em método para dividir strings. Você tem que escrever em seu próprio país usando String.indexOf()e String.substring(). Não é difícil.

Respondeu 14/10/2008 em 12:16
fonte usuário

votos
2

Isso depende do que exatamente você quer alcançar, mas o String.substring function () será em algum lugar:

String myString = "Hello World";

Isto irá imprimir o substring a partir de índice 6 até o fim da string:

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

Isto irá imprimir o substring a partir de índice 0 até índice 5:

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

Saída de todo o código acima:

Mundo
Olá

Combine isso com as outras funções String ( indexOf(). Etc.) para alcançar o efeito desejado!

Re-lendo sua pergunta, parece que você pode ter sido procurando String.split(). Isto irá dividir a sua cadeia de entrada em uma matriz de seqüências com base em um determinado regex:

String myString = "Hi-There-Gang";

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

Isto irá resultar na matriz splitStrings contendo três cordas, "Hi", "There"e "Gang".

Re-lendo a pergunta novamente, String.splitnão está disponível em J2ME, mas o mesmo efeito pode ser conseguido com substringe indexOf.

Respondeu 14/10/2008 em 12:35
fonte usuário

votos
1

Em J2ME nenhuma separação, mas você pode usar este código para split.This código funciona com apenas delimitador 1 simbol !!! Use NetBeans.File \ Criar Project \ Java ME \ MobileApplication \ Set nome do projeto (split) \ Set checkmark.Delete todo o código em sua (Midlet.java) .Copy este código e passado em sua (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 elementos localizados na matriz chamada (para fora) .Por exemplo a [1]: Olá. Boa sorte!!!

Respondeu 29/09/2013 em 18:10
fonte usuário

votos
1
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
     }

Você pode usar esse método para dividir um delimitador.

Respondeu 25/09/2012 em 09:47
fonte usuário

votos
0

Outra solução alternativa:

 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;
 }
Respondeu 19/08/2014 em 11:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more