Today, I was trapped to saperate a string via different delimits while keeping the order of the words.
I tried StringTokenizer, but it is obsolete and might not be supported in later versions.
Some other references point to String.split(), but it will not preserve the delimits.
Several attempts are taken such as to overload the source split().
I found it annoying so tried a new way.
1. enrich my source string with spaces (you may do with any charactor you like), to provide extra delimits.
2. use String.split(" *") to separate the source string. Attention, the regex is formed of a space and a star.
3. enjoy your String[].
public static String prepareString(String s) throws Exception {
char[] cArray = s.toCharArray();
String result ="";
for(int i=0;i<cArray.length-1;i++){
String sTemp = ""+cArray[i];
boolean isFisrtDot = false;
if(cArray[i]>='A'&&cArray[i]<='Z'||cArray[i]>='a'&&cArray[i]<='z'){
while(cArray[i+1]>='A'&&cArray[i+1]<='Z'||cArray[i+1]>='a'&&cArray[i+1]<='z') {
sTemp+=cArray[i+1];
i++;
if(i==cArray.length-1) break;
}
}else if(cArray[i]<='9'&&cArray[i]>='0'){
while(cArray[i+1]<='9'&&cArray[i+1]>='0'||cArray[i+1]=='.'){
sTemp+=cArray[i+1];
if(cArray[i+1]=='.'&&isFisrtDot == false) isFisrtDot=true;
else if (cArray[i+1]=='.'&&isFisrtDot == true){
throw new Exception("Error: too many dots in value.");
}
i++;
if(i==cArray.length-1) break;
}
}
result+=sTemp+" ";
}
return result;
}