代码之家  ›  专栏  ›  技术社区  ›  Zac

将字符串的子集转换为数组变量的最佳方法是什么?

  •  0
  • Zac  · 技术社区  · 7 年前

    我有一根这样的绳子;

    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不是硬编码的变量,而是从字符串中获取的变量。我的示例代码不工作,所以我不张贴在这里。请让我知道什么是最有效的方式来实现这一点。谢谢!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Tim Biegeleisen    7 年前

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

    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 . 但是,我觉得这并不干净,我宁愿将每个名称映射到同一类型的数组。

    例如,访问name的第二个值 efg

    map.get("efg")[1]