【问题标题】:How to split char Array in chunks which is a new array (Java 8)如何将 char 数组拆分成块,这是一个新数组(Java 8)
【发布时间】:2020-04-06 16:58:58
【问题描述】:

我想在我的方法中为每个输入的 char c 拆分一个 char 数组,对于每个输入的 c,它应该拆分 char 数组,删除输入的 c 并在新数组中创建新的数组块。所以来自:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r',
'l', 'd', '!']

调用split("l") 方法应该打印:

[['H', 'e'], ['o', ' ',
'W', 'o', 'r'], ['d', '!']]

public MyString[] split(char c) {
    MyString[] newarr = new MyString[c];
    ArrayList<MyString> arrlst = new ArrayList<MyString>();

    for (MyString ch : arrlst) {
        for (int k = 0; k < arrlst.size(); k++) {
            arrlst.spliterator();
        }
    }

    MyString[] newarr2 = new MyString[c];
    return newarr;
}

我知道这还没有意义,我正试图弄清楚我昨晚想要做什么。计划是填充arrlst,这是一个MyString类型的arraylist,其中MyString的对象。

MyString[] 定义如下:

public class MyString {

    private char[] arr;

    public MyString(int length) {


        arr = new char[length]; 

    }

我想用 MyString 实现一个类似于 Java 中的 String 的 String 类。 (我还定义了一些我没有在这里列出的例外,这将是一个很长的代码。)

【问题讨论】:

  • 您的代码毫无意义,我们不知道 MyString 是什么。也许在发布问题之前再试一次,您应该能够比当前尝试更进一步

标签: java arrays arraylist split iterator


【解决方案1】:

如果允许使用现有的实用程序,可以在 Single Scary(Very) 行中完成。

char[] chars = new char[]{'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
String[][] processedData = Arrays.stream(new String(chars).split("l")).map(x-> Arrays.stream(x.split("")).filter(y->!y.equalsIgnoreCase("")).collect(Collectors.toList()).toArray(new String[]{})).filter(x->x.length!=0).collect(Collectors.toList()).toArray(new String[][]{});

已根据评论更新:

我已经使用toString()split() 方法实现了一个自定义字符串类,该方法复制了原始字符串类的行为。

这是其中的一段代码。我希望这是你所期待的,

public MyString[] split(char c){
        StringBuilder builder = new StringBuilder();
        ArrayList<MyString> myStringList = new ArrayList<>();
        for(int i = 0; i < characterSequence.length; i++){
            if(characterSequence[i] != c){
                builder.append(characterSequence[i]);
            }
            else{
                if(builder.length() != 0){
                    myStringList.add(new MyString(builder.toString()));
                    builder = new StringBuilder();
                }
            }
        }
        if(builder.length() != 0){
            myStringList.add(new MyString(builder.toString()));
        }
        return myStringList.toArray(new MyString[]{});
    }

这就是它的工作原理,

char[] chars = new char[]{'H','e','l','l','o',' ','W','o','r','l','d','!'};
MyString myString = new MyString(chars);// or new MyString("Hello World!"); 
MyString[] splitData = myString.split('l'); 
MyString.print(splitData);// Prints [[H,e],[o, ,W,o,r],[d,!]]

如需完整实现,请查看Repo

【讨论】:

  • 感谢您的回复,L!这适用于数组中的字符吗?我想不是,因为你的数组是 String[][],而我的 MyString[] 存储字符。不过我还没有想到二维数组,谢谢你的想法!
  • 只有for循环没有方法,还是我需要arraylists,streams,..?什么是最简单和最干净的方法,我不知道从哪里开始。
  • 是的,使用普通循环完全可以。稍后将更新答案。卷入了某事的中间。同时,你能告诉我MyString[]是什么吗?
  • @Light 顺便说一句,我使用流只是因为,特别是您在问题中提到了 Java8。
  • 好的,非常感谢。我更新了我的帖子。流也是可能的,我很好奇我的 for 循环的想法是否可行,但我不知道如何。感谢您的宝贵时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-02-25
  • 2017-10-27
  • 2021-12-06
  • 2012-01-01
相关资源
最近更新 更多