猿问

令牌 - 字符串 Java

我有以下任务我成功了,但是代码效率很低,如果有人能告诉我一种更有效的方法,也许是子字符串,我将不胜感激。那作业:


/**

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


SMILET
浏览 186回答 2
2回答

慕妹3146593

使用 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)

猛跑小猪

如果需要,您可以使用 String 类的 split 方法(就像@Amidala Siva Kumar 建议的那样),如下所示:public static String[] tokenize (String str, char separator) {&nbsp; &nbsp; String[] tokens = str.split(separator);&nbsp; &nbsp; return tokens;}或者,如果您想使用自己的拆分来执行此操作,则可以这样做(对代码的改进)。public static String[] tokenize (String str, char separator) {&nbsp; &nbsp; String sep = ""+separator;&nbsp; &nbsp; int max_size = str.length() - str.replace(sep, "").length() +1 ; // Calculate max array size&nbsp; &nbsp; String[] temp = new String[max_size];&nbsp; &nbsp; int start = 0, index = 0, exact_size = 0;&nbsp; &nbsp; int pos = str.indexOf(separator);&nbsp; &nbsp; while (pos>=start) {&nbsp; &nbsp; &nbsp; &nbsp; if (pos>start){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp[index++] = str.substring(start,pos).trim();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exact_size++;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; start = pos + 1;&nbsp; &nbsp; &nbsp; &nbsp; pos = str.indexOf(separator,start);&nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; String[] tokens = new String[exact_size];&nbsp; &nbsp; System.arraycopy(temp, 0, tokens, 0, exact_size);&nbsp;&nbsp; &nbsp; return tokens;}希望你觉得它有用。
随时随地看视频慕课网APP

相关分类

Java
我要回答