【问题标题】:How to merge two arrays from two "if" clauses together如何将两个“if”子句中的两个数组合并在一起
【发布时间】:2014-05-01 06:12:14
【问题描述】:

我有 2 个从文本文件中解析的数组:

if (line.startsWith("#dataOne ")){  
    String[] oneS = line.split("= ");                   
    String[]oneT= oneS[1].split(" ");
   // System.out.println(Arrays.toString(oneT));            
}

if (line.startsWith("#dataFour")){
    String[] twoS = line.split("= ");   
    String[]twoSets= twoS[1].split(", ");                  
    // System.out.println(Arrays.toString(twoSets));
} 

如何将oneTtwoSets 合并在一起?

【问题讨论】:

  • 你认为这会怎样?
  • 我不知道这种特殊情况如何工作,当它们都在单独的子句中时。我知道arraycopy,但我不知道如何在这里应用它。
  • 如果你有一个可以放 3 个苹果的盒子,另一个可以放 6 个苹果的盒子,你需要多大的盒子才能放 9 个苹果?
  • 如果我不知道怎么打开有 3 个苹果的盒子和有 6 个苹果的盒子,我无法装满能装 9 个苹果的盒子。
  • 所以回顾一下数组是如何工作的。查看语法是什么。查看如何访问元素以及如何迭代它们。查看您如何创建它们以及如何指定它们的大小。

标签: java arrays merge concatenation


【解决方案1】:

我认为最简单的方法是使用List<String> 来保存两个数组。你可以这样做:

List<String> merged = new ArrayList<>();
if (line.startsWith("#dataOne ")){  
    String[] oneS = line.split("= ");                
    String[]oneT= oneS[1].split(" ");
    merged.addAll(Arrays.asList(oneT));
}

if (line.startsWith("#dataFour")){
    String[] twoS = line.split("= ");   
    String[]twoSets= twoS[1].split(", ");                  
    merged.addAll(Arrays.asList(twoSets));
} 

然后,如果您确实需要一个数组而不是 List,则可以将其转换为 String[]。或者您可以先将 merged 的元素添加到 Set 以消除重复项。

或者,您可以将oneTtwoSets 置于if 块的外部,并使用System.arraycopy 将它们直接合并到String[]

String[] oneT;
String[] twoSets;
if (line.startsWith("#dataOne ")){  
    String[] oneS = line.split("= ");                
    oneT= oneS[1].split(" ");
} else {
    oneT = new String[0];
}

if (line.startsWith("#dataFour")){
    String[] twoS = line.split("= ");   
    twoSets= twoS[1].split(", ");                  
} else {
    twoSets = new String[0];
} 

String[] merged = new String[oneT.length + twoSets.length];
System.arraycopy(oneT, 0, merged, 0, oneT.length);
System.arraycopy(twoSets, 0, merged, oneT.length, twoSets.length);

【讨论】:

  • 我确实尝试将 oneTtwoSets 置于 if 块之外,但 Eclipse 说它们尚未初始化。
  • @user3452464 - 是的,这就是为什么我在每个 if 语句中添加了一个 else 子句。 (请注意,我编辑了 else 子句中的代码以解决语法问题;我最近编写了太多 JavaScript 编码。:()
  • else 有助于初始化,但它会打印出空数组。我认为它没有从 if 子句中访问长度。
  • @user3452464 - 你能编辑你的问题并发布当前代码吗?这将有助于我们了解发生了什么。查看一些示例输入也会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多