我有一个字符串apple
,我希望它的长度最多为8个字符。
所以我有apple
。其5
个字符长。我用3 *
填充它,使其***apple
所以我有bat
。其3
个字符长。我用5 *
填充它,使其*****bat
有什么办法吗?无法在其中找到任何填充库。
答案 0 :(得分:2)
内置于Java 11+
"*" // A single-character string.
.repeat( 8 - "apple".length ) // `String::repeat` multiplies text. Here we return a `String` of a certain number of asterisks.
.concat( "apple" ) ; // Appends to those asterisks our original input.
***苹果
String::repeat
Java 11为String
类带来了一种新方法repeat
。此方法将一段文本乘以一定次数。乘以零是有效的,从而导致一个空字符串。
在我们的例子中,我们要乘以单个字符串*
。
int goal = 8 ;
String input = "apple" ;
int length = input.length() ;
String output = "*".repeat( goal - length ).concat( input ) ;
请参阅此code run live at IdeOne.com。
***苹果
答案 1 :(得分:1)
其他操作方式:
String.format("%8s", "helllo").replace(' ', '*');
在这种情况下,您无需添加库。
答案 2 :(得分:0)
您可以使用Apache Commons Lang库中的StringUtils.leftPad
StringUtils.leftPad(null, *, *) = null
StringUtils.leftPad("", 3, 'z') = "zzz"
StringUtils.leftPad("bat", 3, 'z') = "bat"
StringUtils.leftPad("bat", 5, 'z') = "zzbat"
StringUtils.leftPad("bat", 1, 'z') = "bat"
StringUtils.leftPad("bat", -1, 'z') = "bat"
答案 3 :(得分:0)
不需要库。使用StringBuilder
和reverse()
来提高速度(插入速度比追加速度慢):
public String padWord(String word)
{
if(word.length() < 8)
{
StringBuilder foo = new StringBuilder(word);
foo = foo.reverse();
for(int x = word.length(); x < 8; x++)
{
foo.append('*');
}
foo.reverse();
}
return foo.toString();
}