为了账号安全,请及时绑定邮箱和手机立即绑定

如何简化 split() 的实现?

如何简化 split() 的实现?

智慧大石 2022-03-10 15:56:11
需要帮助简化 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 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我从头开始做了一个新的拆分实现,至少在我看来(主观)是“更容易”理解的。你可能会也可能不会觉得它有用。


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 对您的学生来说太复杂,您可以将其替换为普通的字符串连接(效率较低且不好的做法)。


查看完整回答
反对 回复 2022-03-10
  • 1 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信