我成功完成了以下任务,但是代码效率很低,如果有人可以向我展示一种更有效的方法(可能带有子字符串),我将不胜感激。作业:
/**
* Separates a given string into tokens, which are the "words" that are
* separated by one or more occurrences of the given separator character.
* Returns the tokens as an array of String values.
*/
public static String[] tokenize (String str, char separator) {
// Removes all the occurrences of the separator at the beginning and end of str
String source = trim(str, separator);
String[] tokens = new String[charRunCount (source,separator)+1];
String tmp = ""; // a string in order to take a word, then run over this string
int j = 0;
int i = 0;
while (i < tokens.length) {
if ( source.charAt (j) != separator ) {
do {
tmp += source.charAt (j);
if ( j >= source.length () - 1 ) {
break;
}
else { // so that we math the source length
j++;
}
} while (source.charAt (j) != separator);
}
if ( source.charAt (j) == separator ) {
j++;
while (source.charAt (j) == separator) {
j++;
}
}
tokens[i] = tmp;// taking the token into place
tmp = ""; //resetting the token so we can begin anew
i++;
}
return tokens;
}
cahrRunCount函数:
public static int charRunCount(String str, char c){
char last = 0;
int counter = 0;
for (int i = 0; i < str.length(); i++) {
// whenever a run starts.
if (last != c && str.charAt(i) == c) {
counter++;
}
last = str.charAt(i);
}
return counter;
}
我不能使用import或regex,谢谢!
答案 0 :(得分:3)
使用String.split方法
String[] tokens = str.split(separator)
for(String token:tokens){
//your code goes here
}
此处的文档
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
答案 1 :(得分:1)
如果需要,可以使用String类的split方法(就像@Amidala Siva Kumar建议的那样),如下所示:
public static String[] tokenize (String str, char separator) {
String[] tokens = str.split(separator);
return tokens;
}
或者,如果您想使用自己的分割进行操作,则可以这样做(对代码进行改进)。
public static String[] tokenize (String str, char separator) {
String sep = ""+separator;
int max_size = str.length() - str.replace(sep, "").length() +1 ; // Calculate max array size
String[] temp = new String[max_size];
int start = 0, index = 0, exact_size = 0;
int pos = str.indexOf(separator);
while (pos>=start) {
if (pos>start){
temp[index++] = str.substring(start,pos).trim();
exact_size++;
}
start = pos + 1;
pos = str.indexOf(separator,start);
}
String[] tokens = new String[exact_size];
System.arraycopy(temp, 0, tokens, 0, exact_size);
return tokens;
}
希望您发现它有用。