J2ME で文字列を効果的に分割するにはどうすればよいですか?
StringTokenizer
標準版(J2SE)にはorがありますがString.split(String regex)
、マイクロ版(J2ME、MIDP)にはありません。
J2ME で文字列を効果的に分割するにはどうすればよいですか?
StringTokenizer
標準版(J2SE)にはorがありますがString.split(String regex)
、マイクロ版(J2ME、MIDP)にはありません。
J2ME 用の StringTokenizer クラスの実装がいくつかあります。Ostermillerによるこれには、必要な機能が含まれている可能性が最も高い
いくつかの変更と次の例については、モバイル プログラミング ピット ストップのこのページも参照してください。
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
文字列を分割する組み込みメソッドはありません。と を使用して自分で記述する必要が
String.indexOf()
ありますString.substring()
。難しくない。
これがお役に立てば幸いです...これは、アプリケーションで使用した私自身の実装です。もちろん、これはまだ最適化できます。私はそれをする時間がありません...そしてまた、私はここで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.split(...) は J2SE で使用できますが、J2ME では使用できません。
独自のアルゴリズムを作成する必要があります:サンプル ソリューションを含む関連記事。
それは正確に何を達成したいかによって異なりますが、関数 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
同じ効果を達成できます。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
}
このメソッドを使用して、区切り文字を分割できます。
別の代替ソリューション:
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;
}