효과적인 방법으로 문자열을 J2ME에서 분할하는 방법은 무엇입니까?J2ME에서 문자열을 분할하는 방법은 무엇입니까?
표준 버전 (J2SE)에는 StringTokenizer
또는 String.split(String regex)
가 있지만 마이크로 버전 (J2ME, MIDP)에는 없습니다.
효과적인 방법으로 문자열을 J2ME에서 분할하는 방법은 무엇입니까?J2ME에서 문자열을 분할하는 방법은 무엇입니까?
표준 버전 (J2SE)에는 StringTokenizer
또는 String.split(String regex)
가 있지만 마이크로 버전 (J2ME, MIDP)에는 없습니다.
J2ME 용 StringTokenizer 클래스의 구현이 몇 가지 있습니다. 나는 ... 이것은 내 자신의 구현 난입니다이 하나가 당신을 도울 것입니다 희망
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
감사합니다. – Spoike
라이브러리의 죽은 링크입니다. 당신은 일할 수 있습니까? –
문자열을 분할하는 기본 제공 방법이 없습니다. String.indexOf()
및 String.substring()
을 사용하여 직접 작성해야합니다. 어렵지 않다.
예,하지만 효과적일까요? String.substring()은 가비지가 수집 될 때까지 메모리를 늘리는 새로운 문자열을 생성합니다. – Spoike
StringTokenizer.nextToken()에는 내부적으로 "return string.subString (...)"이 포함되어 있으므로 더 나쁜 것으로 생각하지 않습니다. – Cowan
하위 문자열은 (가변적 인) char 배열을 공유하는 String에 대해 private constructof를 사용합니다 , 그렇습니다 - 그것은 효율적으로 메모리가 될 것입니다. – ddimitrov
:
String myString = "Hello World";
이 문자열의 끝 인덱스 6 일부터 시작되는 문자열을 인쇄합니다 :
System.out.println(myString.substring(0,5));
,691 :
System.out.println(myString.substring(6));
이 색인 5까지 인덱스 0에서 시작하는 문자열을 인쇄합니다 위의 모든 코드
출력 :
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
: Ostermiller에 의해이 사람은 당신이
페이지의 일부 수정에 대한 this page on Mobile Programming Pit Stop 다음과 같은 예를 필요로하는 기능을 포함 가능성이 가장 높은 것 내 응용 프로그램에 사용됩니다. 물론 이것은 여전히 최적화 될 수 있습니다. 난 그냥 할 시간이 없어 ... 그리고 또한, 여기 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;
}
btw, 코드를 사용할 수있는 방법은 다음과 같습니다. String [] elements = split (새 StringBuffer ("Hello | World"), "|"); 또는 String [] elements = split (새 StringBuffer ("HelloblahWorld"), "blah"); 둘 다 { "Hello", "World"}를 반환합니다. – demotics2002
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에서는 분할이 없지만이 코드를 분할에 사용할 수 있습니다.이 코드는 단 하나의 simbol 구분 기호로 작동합니다. NetBeans.File 사용 \ Project 만들기 \ Java ME \ MobileApplication \ 프로젝트 이름 설정 (split) \ Checkmark.Detlete (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)이라고하는 배열에 있습니다. 예 : 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는 멋진 매끄러운 코드를 만들었습니다. String split 메소드를 사용하기 위해이를 변경하면 더욱 까다로운 코드가 생성됩니다. 그것은 Java의 방법 인 것처럼 보이지만, 좋은 기능을 사용하지 말고 대신 사람들이 쓸데없는 것들을 사용하도록하십시오. –