如何简化split()的实现?

时间:2018-12-11 17:47:16

标签: java split

需要帮助简化split()的实现。不幸的是split()没有作为AP JAVA的一部分被涵盖。我需要向高中生介绍,并且需要一种简单易懂的方法。到目前为止,这是我想出的,但是想知道我是否缺少明显的内容。

String[] tokens = new String[3]; 
boolean exit = false;

do{ 
   System.out.print( "Please enter first name, last name and password to logon or 
                      create a new account \n" + "use a space to seperate entries, 
                      no commas                                                  : ");

   input = kboard.nextLine();
   int spaces = 0;

   if(input.length() == 0) exit = true;
   if(!exit){                
       //tokens = input.split(" ");
       int idx;
       int j = 0;
       for (int i = 0; i < input.length();){
           idx = input.indexOf(" ",i);
           if(idx == -1 || j == 3) {
               i = input.length();
               tokens[j] = input.substring(i);
           }else{                        
               tokens[j] = input.substring(i,idx);                       
               i = idx + 1;
           }
           j++;
       }
       spaces = j - 1 ;                
   }

 // check we have 2 and no blank line     
}while (spaces != 2 && exit == false); 

1 个答案:

答案 0 :(得分:1)

我从头开始做了一个新的 Split 实现,至少在我看来(主观)是“更简单”的理解。您可能会或可能不会觉得有用。

public static String[] split(String input, char separator) {
    // Count separator (spaces) to determine array size.
    int arrSize = (int)input.chars().filter(c -> c == separator).count() + 1;
    String[] sArr = new String[arrSize];

    int i = 0;
    StringBuilder sb = new StringBuilder();
    for (char c : input.toCharArray()) { // Checks each char in string.
        if (c == separator) { // If c is sep, increase index.
            sArr[i] = sb.toString();
            sb.setLength(0); // Clears the buffer for the next word.
            i++;
        }
        else { // Else append char to current word.
            sb.append(c);
        }
    }
    sArr[i] = sb.toString(); // Add the last word (not covered in the loop).
    return sArr;
}

我假设您想使用原始数组进行教学,否则,我将返回一个ArrayList来进一步简化。如果StringBuilder对您的学生来说太复杂了,您可以将其替换为普通的字符串连接(效率低下和不当使用)。