如何简化 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); 


智慧大石
浏览 144回答 1
1回答

一只甜甜圈

我从头开始做了一个新的拆分实现,至少在我看来(主观)是“更容易”理解的。你可能会也可能不会觉得它有用。public static String[] split(String input, char separator) {&nbsp; &nbsp; // Count separator (spaces) to determine array size.&nbsp; &nbsp; int arrSize = (int)input.chars().filter(c -> c == separator).count() + 1;&nbsp; &nbsp; String[] sArr = new String[arrSize];&nbsp; &nbsp; int i = 0;&nbsp; &nbsp; StringBuilder sb = new StringBuilder();&nbsp; &nbsp; for (char c : input.toCharArray()) { // Checks each char in string.&nbsp; &nbsp; &nbsp; &nbsp; if (c == separator) { // If c is sep, increase index.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sArr[i] = sb.toString();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sb.setLength(0); // Clears the buffer for the next word.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i++;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else { // Else append char to current word.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sb.append(c);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; sArr[i] = sb.toString(); // Add the last word (not covered in the loop).&nbsp; &nbsp; return sArr;}我假设您想使用原始数组进行教学,否则,我会返回一个 ArrayList 以进一步简化。如果 StringBuilder 对您的学生来说太复杂,您可以将其替换为普通的字符串连接(效率较低且不好的做法)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java