如何在J2ME中拆分字符串?

如何以有效的方式在J2ME中拆分字符串?

标准版(J2SE)中有一个StringTokenizerString.split(String regex) ,但它们在微版本(J2ME,MIDP)中不存在。

J2ME的StringTokenizer类有一些实现。 Ostermiller的这个版本很可能包含您需要的function

有关一些修改,请参阅Mobile Programming Pit Stop上的此页面以及以下示例:

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

没有内置的方法来分割字符串。 你必须使用String.indexOf()String.substring()自己编写它。 不难。

String.split(…)在J2SE中可用,但不在J2ME中。
您需要编写自己的算法: 相关的post和​​样本解决方案 。

我希望这个会帮助你…这是我在我的应用程序中使用的我自己的实现。 当然,这仍然可以进行优化。 我没有时间去做…而且,我在这里工作的是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=sb.length() || start<-1) || str.length()<=0) return index; char[] tofind = str.toCharArray(); outer: for(;start 

这取决于你想要实现什么,但函数String.substring()将在那里:

 String myString = "Hello World"; 

这将打印从索引6开始到字符串结尾的子字符串:

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

这将打印从索引0开始直到索引5的子字符串:

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

输出上面的所有代码:

世界
你好

将其与其他String函数( indexOf()等)相结合,以达到预期效果!

重新阅读你的问题,看起来好像你一直在寻找String.split() 。 这将基于给定的正则表达式将输入字符串拆分为字符串数组:

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

这将导致splitStrings数组包含三个字符串, "Hi""There""Gang"

再次重新阅读你的问题,在J2ME中没有String.split ,但是使用substringindexOf可以实现相同的效果。

 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 \ Create Project \ Java ME \ MobileApplication \设置项目名称(拆分)\设置checkmark.Delete(Midlet.java)中的所有代码。复制此代码并过去(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) { } } 

位于数组中的Splited元素称为(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; }