Java - 生成长度为x的字符串

时间:2012-04-08 07:06:22

标签: java string

我的Java程序中有一些'重'字符串操作,这通常涉及迭代字符串并用填充字符替换某些段,通常是“@”。这些字符后来被删除但是被使用,以便在迭代期间String和当前索引的长度保持不变。

此过程通常涉及一次更换超过1个字符 例如
我可能需要将"cat"替换为字符串"@@@"中的"I love cats",并提供"I love @@@s", 因此,我经常需要创建长度为 x 的“@”字符串。

在python中,这很容易。

NewString = "@" *x

在Java中,我发现我当前的方法令人反感。

String NewString = "";
for (int i=0; i< x; i++)  {  
    NewString = NewString.concat("@");  }

是否有适当的,预先建立的方法来执行此操作?
是否有人采用更短,更“高尔夫”的方法? 谢谢!


规格:
Java SE(Jre7)
Windows 7(32)

5 个答案:

答案 0 :(得分:6)

我不清楚评论的建议是什么样的正则表达式,但创建一个字符串填充特定字符到给定长度非常容易:

public static String createString(char character, int length) {
    char[] chars = new char[length];
    Arrays.fill(chars, character);
    return new String(chars);
}

答案 1 :(得分:4)

Guava有一个很好的小方法Strings.repeat(String, int)。查看该方法的source,它基本上等于:

StringBuilder builder = new StringBuilder(string.length() * count);
for (int i = 0; i < count; i++) {
  builder.append(string);
}
return builder.toString();

答案 2 :(得分:1)

构建长度为N的字符串的方式非常低效。您应该使用StringBuffer方便的append方法,或者构建一个N字符数组,并使用String的相应构造函数。

答案 3 :(得分:1)

java.lang.String是不可变的。因此,连接字符串将导致创建临时字符串对象,因此速度很慢。您应该考虑使用像StringBufferStringBuilder这样的可变缓冲区。在java中使用字符串时的另一个最佳实践是尽可能使用CharSequence类型。这样可以避免对toString()进行不必要的调用,您可以轻松更改基础实现类型。

如果您正在寻找一个重复字符串的单行,这证明使用外部库是合理的,请查看Apache Commons库中的StringUtils.repeat。但是,我觉得你可以编写自己的代码,而不是使用另一个库来完成重复字符串的简单任务。

答案 4 :(得分:0)

总是在“填充”字符串中使用相同的字符,你知道 x 的最大值吗?您可以创建一个可以切割成任意长度的常量前置:

private static final FILLER = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";

// inside your method
String newString = FILLER.substring(0, x);