如何以有效的方式在J2ME中分割字符串?如何在J2ME中分割字符串?
標準版(J2SE)中有StringTokenizer
或String.split(String regex)
,但它們在微版(J2ME,MIDP)中不存在。
如何以有效的方式在J2ME中分割字符串?如何在J2ME中分割字符串?
標準版(J2SE)中有StringTokenizer
或String.split(String regex)
,但它們在微版(J2ME,MIDP)中不存在。
J2ME有一些StringTokenizer類的實現。這一個Ostermiller將最有可能包括的功能,你需要
又見this page on Mobile Programming Pit Stop了一些修改和下面的例子:
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
沒有內置的方法來拆分字符串。你必須使用 String.indexOf()
和String.substring()
自己寫。不難。
這取決於你究竟想達到什麼,但功能String.substring()將在那裏的某個地方:
String myString = "Hello World";
這將打印的子指數從6開始的字符串的結束:
System.out.println(myString.substring(6));
這將打印從索引0開始的子直到索引5:
System.out.println(myString.substring(0,5));
輸出的上述所有的代碼:
World Hello
與其他字符串函數(indexOf()
合併於此。等等)來達到預期的效果!
重新閱讀你的問題,它看起來好像你可能一直在尋找String.split()
。這將您的輸入字符串分割成基於給定的正則表達式的字符串數組:
String myString = "Hi-There-Gang";
String[] splitStrings = myString.split("-");
這將導致包含三個串,"Hi"
,"There"
和"Gang"
的splitStrings陣列英寸
再次重新閱讀您的問題,String.split
在J2ME中不可用,但使用substring
和indexOf
可以實現相同的效果。
String.split(...)在J2SE中可用,但不支持J2ME。
您需要編寫自己的算法:related post with sample solution。
鏈接當前不再有效 – Abdull 2014-10-18 09:15:31
我希望這個人會幫助你...這是我自己的I用於我的應用程序。當然,這仍然可以優化。我只是沒有時間去做...而且,我正在這裏工作在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;
}
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
}
您可以使用拆分分隔符此方法。
在J2ME中沒有分割,但是可以使用此代碼進行分割。此代碼僅適用於1個simbol分隔符! 使用NetBeans.File \創建項目\ Java ME \ MobileApplication \設置項目名稱(拆分)\設置複選標記。刪除您的(Midlet.java)中的所有代碼。複製此代碼並在您的(Midlet.java)中過去。
//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) {
}
}
位於數組中的分割元素調用(out)。例如out [1]:Hello。 祝您好運!
另一種替代方案:
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;
}
一個側面說明的一點,不與J2ME幫助,但可能會幫助別人的未來......不幸的是,StringTokenizer的已過時,J2SE。建議的替換是僅使用字符串拆分方法。相當不幸的是,StringTokenizer爲了一些漂亮的代碼而做出的。改變它只是使用字符串拆分方法使得代碼更笨拙。這似乎確實是Java的方式,貶低好的功能,並告訴人們只是使用笨重的功能。 – 2010-07-27 12:50:56