令牌-字符串Java

时间:2018-11-05 15:48:07

标签: java string token

我成功完成了以下任务,但是代码效率很低,如果有人可以向我展示一种更有效的方法(可能带有子字符串),我将不胜感激。作业:

/**
 * 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,谢谢!

2 个答案:

答案 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;
}

希望您发现它有用。