Как мне упростить эту реализацию split ()? - PullRequest
0 голосов
/ 11 декабря 2018

Нужна помощь в упрощении реализации 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 голосов
/ 11 декабря 2018

Я сделал новую реализацию 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 слишком сложен для ваших студентов, вы можете заменить его на обычную конкатенацию строк (менее эффективная и плохая практика).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...