كيف يمكنني تقسيم السلاسل في J2ME؟
سؤال
وكيف يمكنني تقسيم السلاسل في J2ME بطريقة فعالة؟
وهناك StringTokenizer
أو String.split(String regex)
في الطبعة القياسية (J2SE)، ولكنها غائبة في الطبعة الدقيقة (J2ME، MIDP).
المحلول
وهناك عدد قليل من التطبيقات من فئة StringTokenizer لJ2ME. هذا واحد من قبل Ostermiller ستتضمن على الأرجح وظيفة تحتاج
وانظر أيضا هذه الصفحة على البرمجة موبايل حفرة توقف أ > لبعض التعديلات والمثال التالي:
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
نصائح أخرى
لا يوجد أي بني في طريقة لتقسيم السلاسل. لديك لكتابة ذلك بنفسك باستخدام
String.indexOf()
وString.substring()
. ليس من الصعب.
وString.split (...) هو متاح في J2SE، ولكن ليس J2ME.
هل هناك حاجة لكتابة الخوارزمية الخاصة بك: آخر ذات الصلة مع محلول العينة
وآمل أن يكون هذا واحد سوف تساعدك على ... هذا هو تنفيذ بلدي أنا استخدم في طلبي. بالطبع هذا لا يزال من الممكن الأمثل. أنا فقط لم يكن لديك الوقت للقيام بذلك ... وأيضا، وأنا أعمل على StringBuffer هنا. فقط ريفاكتور هذا لتكون قادرة على استخدام سلسلة بدلا من ذلك.
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.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("-");
وهذا سيؤدي إلى مجموعة splitStrings يحتوي على ثلاثة سلسلة، "Hi"
، "There"
و"Gang"
.
والسؤال مرة أخرى القراءة ري، String.split
غير متوفرة في J2ME، ولكن التأثير نفسه يمكن أن يتحقق مع 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
}
ويمكنك استخدام هذا الأسلوب لتقسيم محدد.
في J2ME لا انقسام، ولكن يمكنك استخدام هذا الرمز لsplit.This يعمل الرمز مع فقط محدد 1 simbol !!! استخدام NetBeans.File \ إنشاء مشروع \ جافا ME \ تطبيق الجوال \ تعيين اسم المشروع (تقسيم) \ مجموعة checkmark.Delete كافة التعليمات البرمجية الخاصة بك في (Midlet.java) .Copy هذا الرمز والماضي في حياتك (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 وتقع في مجموعة تسمى (الخروج). للحصول على مثال من [1]: مرحبا. حظا سعيدا!
وحل بديل آخر:
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;
}