java double拆分为String [] []

Asp*_*son 3 java arrays string split

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

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

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

但这必须是一个String[][]

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

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

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

T.J*_*der 5

您走在正确的轨道上。一旦获得了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("\\|");
}
Run Code Online (Sandbox Code Playgroud)

现场例子

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

或使用流(感谢ChenZhou指出了其中的80%的方式),而剩下的一切都归功于JavaDoc

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

现场例子

  • @Aspwilenson-这是每个人首先要学习的常见“陷阱”。:-) (2认同)