我的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)
答案 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
是不可变的。因此,连接字符串将导致创建临时字符串对象,因此速度很慢。您应该考虑使用像StringBuffer
或StringBuilder
这样的可变缓冲区。在java中使用字符串时的另一个最佳实践是尽可能使用CharSequence
类型。这样可以避免对toString()
进行不必要的调用,您可以轻松更改基础实现类型。
如果您正在寻找一个重复字符串的单行,这证明使用外部库是合理的,请查看Apache Commons库中的StringUtils.repeat
。但是,我觉得你可以编写自己的代码,而不是使用另一个库来完成重复字符串的简单任务。
答案 4 :(得分:0)
你总是在“填充”字符串中使用相同的字符,你知道 x 的最大值吗?您可以创建一个可以切割成任意长度的常量前置:
private static final FILLER = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
// inside your method
String newString = FILLER.substring(0, x);