如何在Java中连接两个字符串数组

6

我正在使用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构建项目。


1
你想创建一个更大的 String[] 数组,其中包含另外两个数组的元素吗? - Sotirios Delimanolis
1
如果您不介意,可以将ArrayList用作两者的类型。 - SCV
必须使用<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency>来解决这个问题。如果您没有使用Maven,请使用user3567218的建议。 - VictorGram
7个回答

7

仅仅import一个类型是不够的。在编译代码时,必须确保该类型实际存在于类路径中。

似乎...

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

好像您没有在类路径上提供包含上述类型的jar文件。


必须使用以下依赖项才能解决此问题: <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency>然后使用String[] parts = ObjectArrays.concat(a1,a2,String.class);。如果您没有使用Maven,则“user3567218”的响应是另一种方法。 - VictorGram

4
您可以选择另一种方法来实现这个功能。
    String[] a3 = Arrays.copyOf(a1, a1.length + a2.length);
    System.arraycopy(a2, 0, a3, a1.length, a2.length);

3

这段代码应该可以工作。虽然不如ArrayUtils.addAll()看起来美观,但功能是一样的。你还可以避免导入任何东西,也不需要为了一个函数而发行第三方库。

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);

我认为你不需要那个 +1 - Kingsley

1
将正确的Maven依赖项添加到您的POM中:
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.3.2</version>
</dependency>

1

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

Eclipse:

1.右键单击你的项目。

2.选择属性。

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

4.在库选项卡下,点击添加外部Jars按钮。

5.选择下载的文件并点击确定。

Netbeans :

1.右键单击你的项目。

2.选择属性。

3.点击左侧的库。

4.在编译选项卡下,点击添加Jar/Folder按钮。


0
为什么不使用 for 循环将所有元素存储到一个字符串中,然后再使用 .split 方法呢?
String result = null;
for(String aux : a1){
   final += aux + ";";
}

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

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

这将会向堆中添加许多短暂的对象,直到循环结束才会被垃圾回收。如果数组足够大,你将会耗尽内存。 - mttdbrd
是的,我知道。但对于这个问题,这是一个简单的解决方案,可以在未来的项目中有所帮助 ;) - DavideBar
我之前没有注意到你把String变量命名为“final”。这是行不通的,因为它是一个保留关键字。虽然这是一个简单的解决方案,但它并不是内存效率最高的。最好的解决方案要么是像其他人所写的那样使用charAt(),要么是使用toCharArray()。这将是最快的,并且将使用最少的内存。如果你处理长字符串或在多线程环境(如服务器)中处理字符串,你的解决方案很容易产生OutOfMemoryErrors。 - mttdbrd
我用了一个葡萄牙语的单词lol,我更多是指结果。我知道这在长期来看并不高效,但对于这个问题来说,它是一个快速解决方案。而且我是在工作期间完成的,所以没有花太多时间思考解决方案,它是我想到的第一个;) - DavideBar

0
我发现避免在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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接