【问题标题】:How to concat two string arrays in Java如何在Java中连接两个字符串数组
【发布时间】:2014-06-10 03:07:37
【问题描述】:

我正在使用 JDK 1.7 和 Eclipse 并尝试连接两个字符串数组:

String [] a1 = { "a12", "b12" };
String [] a2 = { "c12", "d23", "ewe", "fdfsd" };

我试过了

String[] both = ObjectArrays.concat(a1,a2,String.class); 

进口

import com.google.common.collect.ObjectArrays;

出现错误:

can not resolve "import com.google.common.collect.ObjectArrays"

有人可以帮忙吗?我正在使用 Maven 构建项目。

【问题讨论】:

  • 你想创建一个更大的String[] 包含其他两个数组的元素吗?
  • 如果你不介意的话,可以使用 ArrayList 作为 typr
  • 不得不使用 commons-codeccommons-codec1.9解决这个问题如果您不使用 maven,请使用下面 user3567218 的建议

标签: java concatenation arrays


【解决方案1】:

import 一个类型是不够的。编译代码时,您需要在类路径中实际提供该类型。

好像

can not resolve "import org.apache.commons.lang3.ArrayUtil"

就像您没有在类路径中提供包含上述类型的 jar

【讨论】:

  • 不得不使用 commons-codeccommons-codec1.9 来解决这个问题。然后使用 String[] parts = ObjectArrays.concat(a1,a2,String.class);当您不使用 maven 时,来自“user3567218”的响应是另一种方式。
【解决方案2】:

你也可以这样做

    String[] a3 = Arrays.copyOf(a1, a1.length + a2.length);
    System.arraycopy(a2, 0, a3, a1.length, a2.length);

【讨论】:

    【解决方案3】:

    这段代码应该可以工作。不如 ArrayUtils.addAll() 漂亮,但功能强大。您还可以避免必须导入任何内容,并且您无需为一个功能提供第 3 方库。

    String[] both = new String[a1.length + a2.length];
    System.arraycopy(a1,0,both,0, a1.length);
    System.arraycopy(a2,0,both,a1.length + 1, a2.length);
    

    【讨论】:

      【解决方案4】:

      下载common.codec-1.9.jar(下载zip并解压你会找到jar文件)然后如果你使用像这样的IDE

      日食:

      1.右键单击您的项目。

      2.选择属性。

      3.在左侧点击java构建路径。

      4.在库选项卡下,单击添加外部罐子按钮。

      5.选择下载好的文件,点击确定

      网豆:

      1.右键单击您的项目。

      2.选择属性。

      3.在左侧单击库。

      4.在 Compile 选项卡下 - 单击 Add Jar/Folder 按钮。

      【讨论】:

        【解决方案5】:

        为您的 POM 添加正确的 Maven 依赖项:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        

        【讨论】:

          【解决方案6】:

          你为什么不做一个 for 循环并将所有元素存储到一个 String 中,然后使用 .split ?

          String result = null;
          for(String aux : a1){
             final += aux + ";";
          }
          
          for(String aux1 : a2){
             final += aux1 + ";";
          }
          String[] finalArray= result.split(";");
          

          我是用纸做的,但我几乎可以肯定它会起作用 ;)

          【讨论】:

          • 这将向堆中添加许多短期对象,这些对象在循环结束之前不会被垃圾回收。如果数组足够大,就会耗尽内存。
          • 是的,我知道。但是对于这个问题,它是一个简单的解决方案,可以帮助未来的项目;)
          • 我没有注意到您之前将字符串变量命名为“final”。那永远行不通;这是一个保留关键字。当然,这是一个简单的解决方案,但它的内存效率不高。最好的解决方案是使用其他人编写的 charAt() 或使用 toCharArray()。这将是最快的并且将使用最少的内存。如果您正在处理长字符串或在多线程环境中(如在服务器上),您的解决方案往往会很快产生 OutOfMemoryErrors。
          • 我用了一个葡萄牙语单词lol,我的意思更像是结果。我知道从长远来看它效率不高,但对于这个问题,它是一个快速的解决方案。我在工作期间做了这个,所以我并没有想太多的解决方案,这是我想到的第一个 ;)
          【解决方案7】:

          我发现在arrayCopy() 和copyOf() 中避免所有这些startingIndex 和endingIndex 参数的最简单方法是编写一个特定的方法(这很简单):

          public static String[] concatTwoStringArrays(String[] s1, String[] s2){
              String[] result = new String[s1.length+s2.length];
              int i;
              for (i=0; i<s1.length; i++)
                  result[i] = s1[i];
              int tempIndex =s1.length; 
              for (i=0; i<s2.length; i++)
                  result[tempIndex+i] = s2[i];
              return result;
          }//concatTwoStringArrays().
          

          所以这里是 concatTwoStringArrays() 方法的用法:

          String[] s3 = concatTwoStringArrays(s1, s2);
          

          【讨论】:

            猜你喜欢
            • 2011-04-14
            • 1970-01-01
            • 2012-10-05
            • 1970-01-01
            • 2016-02-24
            • 2011-11-04
            • 2022-11-16
            相关资源
            最近更新 更多