繁体   English   中英

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

[英]Java - Generating strings of length x

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

此过程通常涉及一次替换 1 个以上的字符。
例如
我可能需要在字符串"I love cats"中用"@@@"替换"cat" ,给出"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)

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

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

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();

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

您能否始终在“填充”字符串中使用相同的字符并且您知道x的最大值吗? 你可以预先创建一个常量,它可以被切割成任意长度:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM