数组到字符串的转换

2023/06/07

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(int Array[i])。

2.2 Java Stream API

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

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

此外,我们可以使用Java Stream 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类。

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

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

结果是:

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

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

3.3 Splitter.split()

最后,我们还可以使用Guava及其Splitter流式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"]

4. 总结

在本文中,我们说明了如何使用核心Java和流行的实用程序库将数组转换为字符串,然后再转换回来。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章