2

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

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

在 python 中,这很容易。

NewString = "@" *x

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

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

是否有适当的、预先确定的方法来执行此操作?
有没有人有更短、更“高尔夫”的方法?
谢谢!


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

4

5 回答 5

6

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

public static String createString(char character, int length) {
    char[] chars = new char[length];
    Arrays.fill(chars, character);
    return new String(chars);
}
于 2012-04-08T07:15:03.007 回答
4

Guava 有个不错的小方法Strings.repeat(String, int)。查看该方法的来源,它基本上相当于:

StringBuilder builder = new StringBuilder(string.length() * count);
for (int i = 0; i < count; i++) {
  builder.append(string);
}
return builder.toString();
于 2012-04-08T07:14:49.113 回答
1

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

于 2012-04-08T07:14:18.000 回答
1

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

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

// inside your method
String newString = FILLER.substring(0, x);
于 2012-04-08T07:17:59.917 回答
1

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

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

于 2012-04-08T08:06:09.477 回答