JavaArray和String的转换
英⽂标题【Array to String Conversions】
概述
本页⾯中的内容对 Array 和 String 之间互相进⾏转换的⽅法进⾏⼀些说明。
我们可以使⽤ 原⽣ Java(vanilla Java) 或者⼀些第三⽅的 Java ⼯具类来实现这个转换。
将 Array 转换为 String
在有时候我们希望将字符串的数字或者整数类型的数组转换为字符串。但是如果我们直接使⽤ toString() 来进⾏转换的话,你可能会得到类似下⾯ Ljava.lang.String;@74a10858 的字符串。
上⾯的字符串显⽰的是对象的类型和当前这个对象的哈希代码。
但是, ⼯具类也能够⽀持⼀些 toString() 的⽅法来将 Array 转换为 String。
可以考察下⾯的代码:
String[] strArray = {"one", "two", "three"};
数组转换成字符串String joinedString = String(strArray);
assertEquals("[one, two, three]", joinedString);
int[] intArray = {1, 2, 3, 4, 5};
joinedString = String(intArray);
assertEquals("[1, 2, 3, 4, 5]", joinedString);
StringBuilder 的 append() ⽅法
这个是基于 Java 的原⽣实现,你可以对需要转换的数组进⾏遍历,然后将遍历的结果使⽤ 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 = String();
assertEquals("ConvertArrayWithJava", joinedString);
另外,如果你的数组中存储的数据是整形的话,那么你可以使⽤⽅法转换函数,⾸先将整数类型转换为字符串后再添加。
Java Streams API
从 Java 8 及其以上的版本,你可以使⽤ String.join() ⽅法将给出的数组元素使⽤不同的连接字符串连接在⼀起,在我们使⽤案例中,我们使⽤空⽩字符进⾏连接。
String joinedString = String.join("", new String[]{"Convert", "With", "Java", "Streams"});
assertEquals("ConvertWithJavaStreams", joinedString);
更多的是,我们可以使⽤ Java Streams API 中的 Collectors.joining() ⽅法来进⾏连接,这个连接的⽅法将会保留和输⼊数据相同的顺序。
String joinedString = Arrays
.stream(new String[]{"Convert", "With", "Java", "Streams"})
.collect(Collectors.joining());
assertEquals("ConvertWithJavaStreams", joinedString);
StringUtils.join()
为字符串处理提供了⾮常好的⽅法,能够很好的帮我们解决上⾯的问题。
这个 join 的⽅法可以通过输⼊的数据进⾏⾃动进⾏合并,合并的结果与你输⼊数据的顺序相同。
String joinedString = StringUtils.join(new String[]{"Convert", "With", "Apache", "Commons"});
assertEquals("ConvertWithApacheCommons", joinedString);
Joiner.join()
同样的 Guava 也提供了同样的⼯具类来使⽤。
例如,我们可以使⽤下⾯的代码来对数组进⾏连接。
String joinedString = ("")
.skipNulls()
.join(new String[]{ "Convert", "With", "Guava", null });
assertEquals("ConvertWithGuava", joinedString);
将字符串转换为数组
同样的,在有些时候,我们希望能够将字符串转换为数组。
最常⽤的情况就是有⼀个输⼊的字符串,使⽤特定的分隔符,我们需要按照分隔符的位置将字符串拆分为数组。
String.split()
这个是最简单的⽅法了,可以直接把字符串中的字符使⽤给定的字符进⾏拆分,如下⾯的代码:
String[] strArray = "loremipsum".split("");
上⾯的代码将会⽣成下⾯的输出,因为我们没有给定任何分隔符,所以这个⽅法将会按照字符进⾏拆分。
["l", "o", "r", "e", "m", "i", "p", "s", "u", "m"]
StringUtils.split()
另外,可能⽤得最多的就是 Apache 的 Commons 中的 StringUtils ,这个能够对指定的字符串进⾏拆分。
如果使⽤ String 的⽅法进⾏拆分的话,可能会遇到空对象的问题,例如你输⼊的字符串可能是空字符串,这个时候 String ⾃带的原⽣⽅法将会抛出空异常。
如果使⽤ StringUtils ⽅法的话,可以有效的避免空对象的异常,因此这个⼯具类是⾮常常⽤的。在默认的情况下,这个⽅法使⽤的是空格作为分隔符。
String[] splitted = StringUtils.split("lorem ipsum dolor sit amet");
上⾯的⽅法将会输出下⾯的数组。
["lorem", "ipsum", "dolor", "sit", "amet"]
Splitter.split()
最后,你还可以使⽤ Guava 的拆分 API,如果 Apache Commons 提供的⽅法,通常 Guava 也能提供类似的。
例如我们可以使⽤下⾯的⽅法进⾏拆分,可以看到的是,我们在拆分的时候可以同时对结果进⾏处理。
List<String> resultList = (' ')
.trimResults()
.omitEmptyStrings()
.splitToList("lorem ipsum dolor sit amet");
String[] strArray = Array(new String[0]);
上⾯的代码能够⽣成下⾯的结果:
["lorem", "ipsum", "dolor", "sit", "amet"]
结论
本页⾯对 String 和 Array 之间的转换⽅法进⾏了⼀些说明。⼀般来说可以使⽤原⽣⽅法进⾏转换,但是我们通常不建议使⽤,主要是⽅法功能⽐较差,同时还⾮常容易出现空对象异常。
因此建议使⽤ Apache Commons 或者 Guava 的相关⽅法进⾏转换。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论