首页 > 解决方案 > java双重拆分为String[][]

问题描述

我想出一种方法来获取一个字符串并使用.split()两次来制作一个嵌套数组时遇到了问题。

例如,如果我有字符串1|2|3#1|2然后我使用split("#"),我最终得到:[ "1|2|3" , "1|2" ]

然后我想以.split("|")某种方式进入内部字符串,所以我最终得到:[ [1,2,3] , [1,2] ]

但它必须是一个String[][].

我已经尝试使用 ArrayList 作为外部数组,所以我有一个 ArrayList,然后.add()用每个内部数组构建它。

但后来我不知道如何将其转换为String[][].

我可能遗漏了一些明显的东西,但我已经尝试了大约一个小时并且没有运气。

标签: javaarraysstringsplit

解决方案


你在正确的轨道上。一旦你得到了String[]first 之后split,分配你的String[][]然后在一个循环中填充它,拆分第一个数组中的字符串:

String str = "1|2|3#1|2";
String[] strs = str.split("#");
String[][] result = new String[strs.length][];
for (int i = 0; i < strs.length; ++i) {
    result[i] = strs[i].split("\\|");
}

现场示例

请注意,由于split接受定义正则表达式的字符串,因此您必须对其进行转义|(因为|在正则表达式中具有特殊含义)。你用反斜杠转义正则表达式中的东西。由于我使用字符串文字来编写正则表达式,因此要将反斜杠实际放在字符串中,我必须将其转义(使用另一个反斜杠)。

或者使用流(感谢ChenZhou指出了那里 80% 的路),剩下的路要归功于JavaDoc

String[] strs = "1|2|3#1|2".split("#");
String[][] result = Stream.of(strs).map(e -> e.split("\\|")).toArray(String[][]::new);

现场示例


推荐阅读