Java 字符串复制N次的高效方法

在Java编程中,我们经常需要对字符串进行复制操作,比如将一个字符串复制N次。虽然Java提供了多种字符串操作的方法,但并不是所有的方法都适用于复制字符串。本文将介绍几种高效复制字符串的方法,并提供相应的代码示例。

使用 String.repeat() 方法

从Java 11开始,String 类提供了一个非常方便的 repeat() 方法,可以直接将字符串复制N次。这个方法的实现非常高效,因为它使用了一个内部的 StringBuilder,避免了多次创建新字符串的开销。

String original = "hello";
int n = 3;
String repeated = original.repeat(n);
System.out.println(repeated);  // 输出: hellohellohello

使用 StringBuilder

在Java 11之前,我们可以使用 StringBuilder 类来实现字符串的复制。StringBuilder 提供了一个 append() 方法,可以多次追加字符串,最后使用 toString() 方法将结果转换为字符串。

String original = "hello";
int n = 3;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
    sb.append(original);
}
String repeated = sb.toString();
System.out.println(repeated);  // 输出: hellohellohello

使用 String.format() 方法

String.format() 方法是Java中一个非常强大的字符串格式化工具,我们也可以使用它来复制字符串。这个方法的缺点是每次调用都会创建一个新的字符串,因此在复制次数较多时效率较低。

String original = "hello";
int n = 3;
String repeated = String.format("%" + n + "s", original);
System.out.println(repeated);  // 输出: hellohellohello

使用 String.join() 方法

String.join() 方法是Java 8引入的一个新特性,它可以用来连接字符串数组。我们可以将原始字符串复制到一个字符串数组中,然后使用 join() 方法将它们连接起来。

String original = "hello";
int n = 3;
String[] array = new String[n];
Arrays.fill(array, original);
String repeated = String.join("", array);
System.out.println(repeated);  // 输出: hellohellohello

性能比较

在复制次数较少的情况下,各种方法的性能差异不大。但随着复制次数的增加,使用 String.repeat()StringBuilder 的方法会明显优于 String.format()String.join()

以下是使用 StringBuilderString.repeat() 方法的简单性能测试代码:

public static void main(String[] args) {
    String original = "hello";
    int n = 10000;
    long startTime = System.currentTimeMillis();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) {
        sb.append(original);
    }
    long endTime = System.currentTimeMillis();
    System.out.println("StringBuilder: " + (endTime - startTime) + "ms");

    startTime = System.currentTimeMillis();
    String repeated = original.repeat(n);
    endTime = System.currentTimeMillis();
    System.out.println("String.repeat(): " + (endTime - startTime) + "ms");
}

结论

在Java中复制字符串时,推荐使用 String.repeat() 方法,特别是在Java 11及以上版本。对于Java 11之前的版本,可以使用 StringBuilder 类来实现高效的字符串复制。其他方法如 String.format()String.join() 虽然也可以实现字符串复制,但效率相对较低,不推荐在大量复制时使用。