Contents

Java 数组转换为字符串

1. 概述

在这个简短的教程中,我们将研究将字符串或整数数组转换为字符串然后再转换回来。 我们可以使用常用库中的普通 Java 和 Java 实用程序类来实现这一点。

2. 将数组转换为字符串

有时我们需要将字符串数组或整数数组转换为字符串,但不幸的是,没有直接的方法来执行这种转换。

数组上 toString()方法的默认实现 返回类似Ljava.lang.String;@74a10858的内容,它只通知我们对象的类型和哈希码。

但是,java.util.Arrays  实用程序类支持数组和字符串操作,包括用于数组的toString() 方法。

***Arrays.toString()*返回一个包含输入数组内容的字符串。**创建的新字符串是数组元素的逗号分隔列表,用方括号 (“[]”) 括起来:

String[] strArray = { "one", "two", "three" };
String joinedString = Arrays.toString(strArray);
assertEquals("[one, two, three]", joinedString);
int[] intArray = { 1,2,3,4,5 }; 
joinedString = Arrays.toString(intArray);
assertEquals("[1, 2, 3, 4, 5]", joinedString);

而且,虽然 Arrays.toString(int[]) 方法很好地为我们完成了这项任务,但让我们将它与我们可以自己实现的不同方法进行比较。

2.1. StringBuilder.append()

首先,让我们看看如何使用*StringBuilder.append()*进行这种转换:

String[] strArray = { "Convert", "Array", "With", "Java" };
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strArray.length; i++) {
    stringBuilder.append(strArray[i]);
}
String joinedString = stringBuilder.toString();
assertEquals("ConvertArrayWithJava", joinedString);

此外,要转换整数数组,我们可以使用相同的方法,但 在附加到 StringBuilder时调用Integer.valueOf(intArray[i])

2.2. Java 流 API

Java 8 及更高版本提供了 String.join() 方法,该方法通过连接元素并用指定的分隔符分隔它们来生成一个新字符串,在我们的例子中只是空字符串:

String joinedString = String.join("", new String[]{ "Convert", "With", "Java", "Streams" });
assertEquals("ConvertWithJavaStreams", joinedString);

此外,我们可以使用 Java Streams API 中的 *Collectors.joining()*方法,该方法以与其源数组相同的顺序连接来自 Stream的字符串:

String joinedString = Arrays
    .stream(new String[]{ "Convert", "With", "Java", "Streams" })
    .collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);

2.3. StringUtils.join()

Apache Commons Lang 永远不会被排除在这些任务之外。 StringUtils类有几个*StringUtils.join()*方法,可用于将字符串数组更改为单个字符串:

String joinedString = StringUtils.join(new String[]{ "Convert", "With", "Apache", "Commons" });
assertEquals("ConvertWithApacheCommons", joinedString);

2.4. Joiner.join()

Guava也不甘示弱, 它的 *Joiner *类也同样适用。Joiner类提供了一个流畅的 API,并提供了一些辅助方法来连接数据。

例如,我们可以添加分隔符或跳过空值:

String joinedString = Joiner.on("")
        .skipNulls()
        .join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);

3. 将字符串转换为字符串数组

类似地,我们有时需要将一个字符串拆分为一个数组,其中包含由指定分隔符拆分的输入字符串的某个子集,让我们也看看如何做到这一点。

3.1. String.split()

首先,让我们首先使用不带分隔符的 *String.split()*方法拆分空格:

String[] strArray = "loremipsum".split("");

产生:

["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]

3.2. StringUtils.split()

其次,让我们再看看 Apache 的 Commons Lang 库中的StringUtils类。

在字符串对象的许多 null 安全方法中,我们可以找到 StringUtils.split()。默认情况下,它假定一个空格分隔符:

String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");

结果是:

["lorem", "ipsum", "dolor", "sit", "amet"]

但是,如果需要,我们也可以提供分隔符。

3.3. Splitter.split()

最后,我们还可以使用 Guava 及其 Splitter fluent API:

List<String> resultList = Splitter.on(' ')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("lorem ipsum dolor sit amet");
String[] strArray = resultList.toArray(new String[0]);

生成:

["lorem", "ipsum", "dolor", "sit", "amet"]