我在想出一种方法来获取字符串并使用 .split()
两次来创建嵌套数组时遇到问题。
例如,如果我有字符串 1|2|3#1|2
然后我使用 split("#")
,我最终会得到: [“1|2|3”,“1|2”]
。
然后我想以某种方式 .split("|")
内部字符串,所以我最终得到: [ [1,2,3] , [1,2] ]
。
但它必须是一个String[][]
。
我已经尝试使用 ArrayList 作为外部数组,因此我有一个 ArrayList,然后仅使用 .add()
来使用每个内部数组构建它。
但后来我不知道如何将其转换为 String[][]
。
我可能错过了一些明显的东西,但我已经尝试了大约一个小时,但没有运气。
最佳答案
你走在正确的道路上。在第一次分割
后获得String[]
后,分配您的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% 的路径),感谢 the JavaDoc 完成了剩下的部分:
String[] strs = "1|2|3#1|2".split("#");
String[][] result = Stream.of(strs).map(e -> e.split("\\|")).toArray(String[][]::new);
关于java 双分割到 String[ ][ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58603888/