Pregunta

¿Cómo divido las cadenas en J2ME de manera efectiva?

Hay un StringTokenizer o String.split (String regex) en la edición estándar (J2SE), pero están ausentes en la micro edición (J2ME, MIDP).

¿Fue útil?

Solución

Hay algunas implementaciones de una clase StringTokenizer para J2ME. Este por Ostermiller probablemente incluirá la funcionalidad que necesita

Vea también esta página en Programación móvil Parada de parada para algunas modificaciones y el siguiente ejemplo:

String firstToken;
StringTokenizer tok;

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

Otros consejos

No hay un método integrado para dividir cadenas. Tienes que escribirlo tú mismo usando String.indexOf () y String.substring () . No es difícil.

String.split (...) está disponible en J2SE, pero no en J2ME.
Debe escribir su propio algoritmo: publicación relacionada con la solución de muestra .

Espero que esto te ayude ... Esta es mi propia implementación que utilicé en mi aplicación. Por supuesto, esto todavía puede ser optimizado. simplemente no tengo tiempo para hacerlo ... y también, estoy trabajando en StringBuffer aquí. Simplemente refactorice esto para poder usar String en su lugar.

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

Eso depende de lo que quieras lograr exactamente, pero la función String.substring () estará allí en algún lugar:

String myString = "Hello World";

Esto imprimirá la subcadena a partir del índice 6 hasta el final de la cadena:

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

Esto imprimirá la subcadena desde el índice 0 hasta el índice 5:

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

Salida de todo el código anterior:

World
Hello

¡Combina esto con las otras funciones de cadena ( indexOf () . etc.) para lograr el efecto deseado!

Al volver a leer su pregunta, parece que podría haber estado buscando String.split () . Esto dividirá su cadena de entrada en una serie de cadenas basadas en una expresión regular dada:

String myString = "Hi-There-Gang";

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

Esto dará como resultado la matriz splitStrings que contiene tres cadenas, " Hi " , " There " y " Gang " .

Volver a leer su pregunta nuevamente, String.split no está disponible en J2ME, pero se puede lograr el mismo efecto con substring y 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
     }

Puedes usar este método para dividir un delimitador.

En J2ME no hay división, pero puede usar este código para división. ¡Este código funciona con solo 1 delimitador de símbolos! Use NetBeans.File \ Create Project \ Java ME \ MobileApplication \ Set nombre del proyecto (split) \ Set checkmark.Elimine todo el código en su (Midlet.java). Copie este código y pase el pasado en su (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) {
    }




}

Elementos divididos ubicados en una matriz llamada (out). Por ejemplo out [1]: Hola. ¡Buena suerte!

Otra solución 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;
 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top