需要帮助简化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);
答案 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对您的学生来说太复杂了,您可以将其替换为普通的字符串连接(效率低下和不当使用)。