Bagaimana cara membagi string di J2ME dengan cara yang efektif?
Ada StringTokenizer
atau String.split(String regex)
a> di edisi standar (J2SE), tetapi tidak ada di edisi mikro (J2ME, MIDP).
Bagaimana cara membagi string di J2ME dengan cara yang efektif?
Ada StringTokenizer
atau String.split(String regex)
a> di edisi standar (J2SE), tetapi tidak ada di edisi mikro (J2ME, MIDP).
Ada beberapa implementasi kelas StringTokenizer untuk J2ME. Yang ini oleh Ostermiller kemungkinan besar akan menyertakan fungsi yang Anda perlukan
Lihat juga halaman ini di Pemberhentian Pemrograman Seluler untuk mengetahui beberapa hal modifikasi dan contoh berikut:
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
Tidak ada metode bawaan untuk memisahkan string. Anda harus menulisnya sendiri menggunakan String.indexOf()
dan String.substring()
. Tidak sulit.
String.split(...) tersedia di J2SE, tetapi tidak di J2ME.
Anda diharuskan menulis algoritma Anda sendiri: postingan terkait dengan contoh solusi.
Saya harap ini akan membantu Anda... Ini adalah implementasi saya sendiri yang saya gunakan dalam aplikasi saya. Tentu saja hal ini masih bisa dioptimalkan. saya hanya tidak punya waktu untuk melakukannya... dan juga, saya sedang mengerjakan StringBuffer di sini. Cukup refaktorisasi ini agar dapat menggunakan String sebagai gantinya.
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;
}
Itu tergantung pada apa sebenarnya yang ingin Anda capai, tetapi fungsinya String.substring() akan ada di suatu tempat:
String myString = "Hello World";
Ini akan mencetak substring mulai dari indeks 6 hingga akhir string:
System.out.println(myString.substring(6));
Ini akan mencetak substring mulai dari indeks 0 hingga indeks 5:
System.out.println(myString.substring(0,5));
Output dari semua kode di atas:
World Hello
Gabungkan ini dengan fungsi String lainnya (indexOf()
.dll.) untuk mencapai efek yang diinginkan!
Membaca ulang pertanyaan Anda, sepertinya Anda sedang mencari String.split()
. Ini akan membagi string input Anda menjadi array string berdasarkan regex yang diberikan:
String myString = "Hi-There-Gang";
String[] splitStrings = myString.split("-");
Ini akan menghasilkan array splitStrings yang berisi tiga string, "Hi"
, "There"
dan "Gang"
.
Membaca ulang pertanyaan Anda lagi, String.split
tidak tersedia di J2ME, tetapi efek yang sama dapat dicapai dengan substring
dan 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
}
Anda dapat menggunakan metode ini untuk memisahkan pembatas.
Di J2ME tidak ada pemisahan, tetapi Anda dapat menggunakan kode ini untuk pemisahan. Kode ini hanya berfungsi dengan 1 pembatas simbol!!! Gunakan NetBeans.File\Create Project\ Java ME\ MobileApplication\Set nama proyek(split)\Set tanda centang.Hapus semua kode di (Midlet.java) Anda.Salin kode ini dan tempel di (Midlet.java) Anda.
//IDE NetBeans 7.3.1
//author: UserSuperPupsik
//email: [email protected]
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) {
}
}
Elemen yang dipisahkan terletak dalam larik yang disebut (keluar). Misalnya keluar[1]:Halo. Semoga beruntung!!!
Solusi alternatif lain:
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;
}