在java中连接字符串的最佳方法(时间效率)

时间:2016-12-21 18:35:17

标签: java string

我检查了许多关于连接许多字符串在Java中的最佳方法的讨论。

据我所知,Stringbuilder比+运算符效率更高。

不幸的是,我的问题有点不同。

给定字符串:"AAAAA",我们如何将它与char '_'的n次连接起来,知道'_'必须在String" AAAAA&#34之前到来;

如果 n 等于 3 str="AAAAA",则结果必须是字符串" ___ AAAAA"

String str = "AAAAA";
for (int i=0;i<100;i++){
  str="_"+str;
}

在我的程序中,我有一个Longs String,所以我必须使用有效的方法。

谢谢

EDIT1: 正如我已经阅读了一些解决方案,我发现我只要求一个案例,所以我到达了这个解决方案我觉得很好:

public class Concatenation {

public static void main(String[] args) {
    //so str is the String that i want to modify
    StringBuilder str = new StringBuilder("AAAAA");
    //As suggested 
    StringBuilder space = new StringBuilder();
    for (int i = 0; i < 3; i++) {
        space.append("_");
    }
    //another for loop to concatenate different char and not only the '_'
    for (int i = 0; i < 3; i++) {
        char next = getTheNewchar();
        space.append(next);
    }
    space.append(str);
    str = space;
    System.out.println(str);
}
public static char getTheNewchar(){
    //normally i return a rondom char, but for the case of simplicity i return the same char
    return 'A';
}
}

4 个答案:

答案 0 :(得分:4)

转到char数组,分配正确的大小,填充数组,然后将其总结为字符串。 无法击败那个。

public String concat(char c, int l, String string) {
    int sl = string.length();
    char[] buf = new char[sl + l];
    int pos = 0;
    for (int i = 0; i < l; i++) {
        buf[pos++] = c;
    }
    for (int i = 0; i < sl; i++) {
        buf[pos++] = string.charAt(i);
    }
    return String.valueOf(buf);
}

答案 1 :(得分:4)

在Java中连接字符串的最佳方法:你没有....字符串在Java中是不可变的。每次连接时,都会生成一个新的Object。请改用StringBuilder

 StringBuilder sb = new StringBuilder();
 for (int i=0;i<100;i++){
    sb.append("_");
 }
 sb.append("AAAAA");
 String str = sb.toString();

答案 2 :(得分:1)

我做的事情如下:

import java.util.Arrays;
...
int numUnderbars = 3;
char[] underbarArray = new char[numUnderbars];
Arrays.fill(underbarArray, '_');
String output = String.valueOf(underbarArray) + "AAAA";

但实际情况是,所提出的任何解决方案在运行时都可能会有些不同。

答案 3 :(得分:0)

如果你不喜欢写循环使用

org.apache.commons.lang.StringUtils class repeat(str,n) method.

您的代码会更短:

String str=new StringBuilder(StringUtils.repeat("_",n)).append("AAAAA").toString();

顺便说一句: 该问题的实际答案在该重复方法的代码中。

  • 当需要重复1或2个字符时,它在循环中使用char数组,否则它使用StringBuilder附加解决方案。