java - 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[][]
.
我可能遗漏了一些明显的东西,但我已经尝试了大约一个小时并且没有运气。
解决方案
你在正确的轨道上。一旦你得到了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);
推荐阅读
- git - 如何克隆工作树?
- spring - 如何在没有配置文件和服务文件的 Spring OAuth2 中生成自定义令牌?
- macos - SwiftUI - 将绑定传递给 NSViewRepresentable 会导致内存泄漏和应用程序减速
- http - HTTP 状态 404 - 未找到,尝试在 tomcat 网络服务器上加载 war 文件时遇到此错误
- javascript - 如何使用 Html css Javascript 将 localhost webiste 项目转换为 Android Web 应用程序
- azure - Azure 中针对 kafka 消费者滞后的 Auto Scaling
- graphql - GraphQL:如何处理在自己的类型定义中引用类型?
- api - 有没有办法通过 Google Docs API 以编程方式插入图表?
- javascript - 如何为 Chrome 扩展测试 chrome.runtime.onInstalled?
- javascript - 当一个 HTML 文件中有 2 个页面时,HTML 内置表单验证不显示错误消息