【问题标题】:What is the best way to convert a subset of string to array variables?将字符串子集转换为数组变量的最佳方法是什么?
【发布时间】:2019-03-29 13:24:36
【问题描述】:

我有一个这样的字符串;

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 是未硬编码但从字符串中获取的变量。我的示例代码不起作用,所以我不在这里发布它。请让我知道实现这一目标的最有效方法是什么。谢谢!

【问题讨论】:

  • 这个字符串是包含文本、数字还是两者都包含?
  • 它包含两者.. 但它始终是变量名后跟四个值,应该是该变量数组或列表的一部分。
  • 使用 HashMap 将字符串(“efg”)映射到字符串列表({“1”、“2”、“3”、“4”})怎么样?也就是说,它就像Map<String, List<String>> data - 注意 data 是变量,“abc”和“efg”都是其中的条目,每个条目代表一个字符串序列..这与伪代码不同,因为Java是静态类型的(并且问题不假定Java代码生成器),所以这并没有多大意义。
  • 询问包含不同类型数组的输出是一个混乱的问题。你觉得返回 only 字符串数组可以接受吗?
  • 明确提出您的问题。不清楚你在问什么。

标签: java arrays string type-conversion integer


【解决方案1】:

这是非常接近您声明的要求的工作脚本。它生成一个键名映射,其中包含字符串数组的值。我不会尝试映射到数组的不同类型,这只会增加复杂性,甚至可能超出您打算使用此代码执行的范围。

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]

【讨论】:

  • 嗨,谢谢。如果稍后在代码中,我必须使用值 2(例如 efg[1]),我如何从地图中引用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多