您的位置:

集合元素用指定字符串拼接生成新字符串

在日常编程中,常常需要将一个集合中的元素以某种指定的方式拼接成一个新的字符串,这个操作可能看起来很简单,但仍需要注意一些细节,下面从多个方面进行详细阐述。

一、使用for循环拼接字符串

在使用for循环拼接字符串时,常见的错误是在循环末尾每次新增一个字符串,这样会创建一个新的字符串对象,导致该算法的时间复杂度为 O(n^2)。


// 错误示例:
String s = "";
List<String> list = Arrays.asList("A","B","C");
for (String str : list) {
    s += str + ", ";
}
s = s.substring(0, s.length()-2); // 去掉末尾多余的", "

// 正确示例:
StringBuilder sb = new StringBuilder();
List<String> list = Arrays.asList("A","B","C");
for (String str : list) {
    sb.append(str).append(", ");
}
String s = sb.toString().substring(0, sb.length()-2);

在以上示例中,我们将字符串拼接时改用了 StringBuilder,这样可以极大地提高字符串拼接的效率。

二、使用Java8的Stream API拼接字符串

Stream API 是 Java8 中新增的一种函数式编程方法,它可以方便地对集合进行操作。在 Stream API 中,我们可以使用 Collectors.joining() 方法来拼接字符串。


List<String> list = Arrays.asList("A","B","C");
String s = list.stream().collect(Collectors.joining(", "));

在以上示例中,collect() 方法可以收集 Stream 流中的元素,并将它们拼接为一个字符串。这种方法十分简洁,也很高效。

三、使用StringUtils类拼接字符串

StringUtils 是 Apache Commons Lang 库中的一个工具类,它提供了很多字符串处理的方法,包括字符串拼接。


List<String> list = Arrays.asList("A","B","C");
String s = StringUtils.join(list, ", ");

在以上示例中,我们利用了 StringUtils 的 join() 方法来拼接字符串,这样可以减少一些重复的代码。

四、使用StringJoiner拼接字符串

Java8 中新增了一个 StringJoiner 类,它可以方便地拼接字符串。


List<String> list = Arrays.asList("A","B","C");
StringJoiner sj = new StringJoiner(", ");
for (String str : list) {
    sj.add(str);
}
String s = sj.toString();

在以上示例中,我们首先创建了一个 StringJoiner 对象,并且指定了拼接的分隔符。然后使用 add() 方法向 StringJoiner 中添加元素。当所有元素添加完毕之后,我们调用 toString() 方法即可获得拼接后的新字符串。