14

J2ME で文字列を効果的に分割するにはどうすればよいですか?

StringTokenizer標準版(J2SE)にはorがありますがString.split(String regex)、マイクロ版(J2ME、MIDP)にはありません。

4

8 に答える 8

11

J2ME 用の StringTokenizer クラスの実装がいくつかあります。Ostermillerによるこれには、必要な機能が含まれている可能性が最も高い

いくつかの変更と次の例については、モバイル プログラミング ピット ストップのこのページも参照してください。

String firstToken;
StringTokenizer tok;

tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
于 2008-10-14T11:57:42.933 に答える
4

文字列を分割する組み込みメソッドはありません。と を使用して自分で記述する必要が String.indexOf()ありますString.substring()。難しくない。

于 2008-10-14T11:16:52.127 に答える
3

これがお役に立てば幸いです...これは、アプリケーションで使用した私自身の実装です。もちろん、これはまだ最適化できます。私はそれをする時間がありません...そしてまた、私はここで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;
}
于 2010-07-27T12:42:24.037 に答える
3

String.split(...) は J2SE で使用できますが、J2ME では使用できません。
独自のアルゴリズムを作成する必要があります:サンプル ソリューションを含む関連記事

于 2008-10-14T11:51:58.513 に答える
2

それは正確に何を達成したいかによって異なりますが、関数 String.substring() はどこかにあります:

String myString = "Hello World";

これにより、インデックス 6 から文字列の末尾までの部分文字列が出力されます。

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

これにより、インデックス 0 からインデックス 5 までの部分文字列が出力されます。

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

上記のすべてのコードの出力:

世界
こんにちは

これを他の文字列関数 ( . など) と組み合わせてindexOf()、目的の効果を実現してください!

質問を読み直すと、 を探していたようですString.split()。これは、指定された正規表現に基づいて、入力文字列を文字列の配列に分割します。

String myString = "Hi-There-Gang";

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

これにより、3 つの文字列 、"Hi""There"およびを含む splitStrings 配列が生成され"Gang"ます。

質問をもう一度読み直すことは、J2ME では利用できませんが、 と を使用してString.split同じ効果を達成できます。substringindexOf

于 2008-10-14T11:35:39.187 に答える
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
     }

このメソッドを使用して、区切り文字を分割できます。

于 2012-09-25T08:47:53.180 に答える
0

別の代替ソリューション:

 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;
 }
于 2014-08-19T10:58:22.183 に答える