我确实检查了其他问题; 这个问题的重点是以最有效的方式解决这个特定问题.
有时您希望创建一个具有指定长度的新字符串,并使用填充整个字符串的默认字符.
也就是说,如果你可以new String(10, '*')
从那里创建一个新的字符串会很酷,长度为10个字符都有*.
因为这样的构造函数不存在,并且您无法从String扩展,所以您要么创建一个包装类,要么为您执行此方法.
此刻我正在使用这个:
protected String getStringWithLengthAndFilledWithCharacter(int length, char charToFill) {
char[] array = new char[length];
int pos = 0;
while (pos < length) {
array[pos] = charToFill;
pos++;
}
return new String(array);
}
Run Code Online (Sandbox Code Playgroud)
它仍然没有任何检查(即,当长度为0时,它将不起作用).我首先构造数组,因为我相信它比使用字符串连接或使用StringBuffer更快.
其他人有更好的解决方案吗?
Rom*_*las 100
只需使用apache commons lang项目中的StringUtils类.你有一个leftPad方法:
StringUtils.leftPad("foobar", 10, '*'); // Returns "****foobar"
Run Code Online (Sandbox Code Playgroud)
Cow*_*wan 92
Apache Commons Lang(可能非常有用,可以在任何非平凡项目的类路径上)具有StringUtils.repeat():
String filled = StringUtils.repeat("*", 10);
Run Code Online (Sandbox Code Playgroud)
简单!
unw*_*ind 56
无需执行循环,只使用标准Java库类:
protected String getStringWithLengthAndFilledWithCharacter(int length, char charToFill) {
if (length > 0) {
char[] array = new char[length];
Arrays.fill(array, charToFill);
return new String(array);
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我还为length == 0
案例添加了合适的代码.
kwa*_*nke 33
一些可能的解决方
这将创建一个填充长度为'0'的字符串,然后用charToFill(旧学校)替换'0'.
String s = String.format("%0" + length + "d", 0).replace('0', charToFill);
Run Code Online (Sandbox Code Playgroud)
这将创建一个List,其中包含使用charToFill的长度字符串,然后将List连接到String中.
String s = String.join("", Collections.nCopies(length, String.valueOf(charToFill)));
Run Code Online (Sandbox Code Playgroud)
这将使用charToFill创建带有字符串的无限java8 Stream,将输出限制为length并使用String joiner(新学校)收集结果.
String s = Stream.generate(() -> String.valueOf(charToFill)).limit(length).collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)
Pav*_*esa 17
char[] chars = new char[10];
Arrays.fill(chars, '*');
String text = new String(chars);
Run Code Online (Sandbox Code Playgroud)
使用Google Guava的解决方案
String filled = Strings.repeat("*", 10);
Run Code Online (Sandbox Code Playgroud)
在Java 11中,您具有repeat
:
String s = " ";
s = s.repeat(1);
Run Code Online (Sandbox Code Playgroud)
(尽管在撰写本文时仍可能更改)
public static String fillString(int count,char c) {
StringBuilder sb = new StringBuilder( count );
for( int i=0; i<count; i++ ) {
sb.append( c );
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
怎么了?
为了提高性能,如果您知道最大长度,则可以使用单个预定义的sting:
String template ="#####################################";
然后在知道长度后简单地执行子串.
归档时间: |
|
查看次数: |
143105 次 |
最近记录: |