我有一个这样的字符串;
abc 1/2/3 3/4/5 4/5/6 6/7/7 efg 1 2 3 4 ...
我想成为它;
String[] abc = {1/2/3, 3/4/5, 4/5/6, 6/7/7}
int[] efg = {1, 2, 3, 4}
其中abc,efg是未硬编码但从字符串中获取的变量。我的示例代码不起作用,因此不在此处发布。请让我知道实现这一目标的最有效方法是什么。谢谢!
答案 0 :(得分:2)
这是正在运行的脚本,它非常接近您陈述的要求。它生成键名映射,其中包含字符串数组的值。我不会花很多精力去映射到不同的 types 数组,这只会增加复杂性,甚至可能超出您打算用此代码处理的范围。
Map<String, String[]> map = new HashMap<>();
String input = "abc 1/2/3 3/4/5 4/5/6 6/7/7 efg 1 2 3 4";
String[] exps = input.split("\\s+(?=[A-Za-z]+)");
for (String exp : exps) {
String[] parts = exp.split("\\s+");
map.put(parts[0], Arrays.copyOfRange(parts, 1, parts.length));
}
// iterate each name, and then print out each string in a given array
for (Map.Entry<String, String[]> entry : map.entrySet()) {
for (String val : entry.getValue()) {
System.out.println(entry.getKey() + ": " + val);
}
}
abc: 1/2/3
abc: 3/4/5
abc: 4/5/6
abc: 6/7/7
efg: 1
efg: 2
efg: 3
efg: 4
如果要使映射更通用,则可能必须将字符串名称映射到Object
。但是,这对我来说并不干净,我宁愿将每个名称映射到相同类型的数组。
例如,要访问名称efg
的第二个值,可以使用:
map.get("efg")[1]