具有特定字符的Java填充字符串

时间:2020-06-24 05:30:37

标签: java string

我有一个字符串apple,我希望它的长度最多为8个字符。

所以我有apple。其5个字符长。我用3 *填充它,使其***apple

所以我有bat。其3个字符长。我用5 *填充它,使其*****bat

有什么办法吗?无法在其中找到任何填充库。

4 个答案:

答案 0 :(得分:2)

tl; dr

内置于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)

不需要库。使用StringBuilderreverse()来提高速度(插入速度比追加速度慢):

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();
}
相关问题