共计 3009 个字符,预计需要花费 8 分钟才能阅读完成。
英文题目【Array to String Conversions】
概述
本页面中的内容对 Array 和 String 之间相互进行转换的办法进行一些阐明。
咱们能够应用 原生 Java(vanilla Java)或者一些第三方的 Java 工具类来实现这个转换。ies.
将 Array 转换为 String
在有时候咱们心愿将字符串的数字或者整数类型的数组转换为字符串。然而如果咱们间接应用 toString() 来进行转换的话,你可能会失去相似上面 Ljava.lang.String;@74a10858 的字符串。
下面的字符串显示的是对象的类型和以后这个对象的哈希代码。
然而,java.util.Arrays 工具类也可能反对一些 toString() 的办法来将 Array 转换为 String。
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);
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 = stringBuilder.toString();
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()
Apache Commons Lang 为字符串解决提供了十分好的办法,可能很好的帮咱们解决下面的问题。
这个 join 的办法能够通过输出的数据进行主动进行合并,合并的后果与你输出数据的程序雷同。
String joinedString = StringUtils.join(new String[]{"Convert", "With", "Apache", "Commons"});
assertEquals("ConvertWithApacheCommons", joinedString);
Joiner.join()
同样的 Guava 也提供了同样的工具类来应用。
例如,咱们能够应用上面的代码来对数组进行连贯。
String joinedString = Joiner.on("")
.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 = Splitter.on(' ')
.trimResults()
.omitEmptyStrings()
.splitToList("lorem ipsum dolor sit amet");
String[] strArray = resultList.toArray(new String[0]);
下面的代码可能生成上面的后果:
["lorem", "ipsum", "dolor", "sit", "amet"]
论断
本页面对 String 和 Array 之间的转换方法进行了一些阐明。一般来说能够应用原生办法进行转换,然而咱们通常不倡议应用,次要是办法性能比拟差,同时还非常容易呈现空对象异样。
因而倡议应用 Apache Commons 或者 Guava 的相干办法进行转换。