带有空格的Java String Padding

时间:2012-07-23 12:49:48

标签: java string groovy

朋友我必须在项目中捏造某些东西,我发现了一些困难,如下:

String name1 = "Bharath"  // its length should be 12
String name2 = "Raju"     //  its length should be 8
String name3 = "Rohan"    //  its length should be 9
String name4 = "Sujeeth"   //  its length should be 12
String name5 = "Rahul"  //  its length should be 11  " Means all Strings with Variable length"

我有字符串和它们的长度。我需要输出如下格式。通过使用字符串连接和填充。我需要在Groovy中回答,即使Java也很好..

"Bharath     Raju    Rohan    Sujeeth     Rahul     "

意思是:

Bharath以5个黑色空格作为lenth是12(7 + 5 = 12),

Raju从4个黑色空格开始,因为lenth是8(4 + 4 = 8),

Rohan开了4个黑色空格,因为lenth是9(5 + 4),

Sujeeth向前5个黑色空格,因为lenth是12(7 + 5),

Rahul开出6个黑色空格,因为lenth是11(5 + 6),

4 个答案:

答案 0 :(得分:8)

你可以这样做:

// A list of names
def names = [ "Bharath", "Raju", "Rohan", "Sujeeth", "Rahul" ]

// A list of column widths:
def widths = [ 12, 8, 9, 12, 11 ]

String output = [names,widths].transpose().collect { name, width ->
  name.padRight( width )
}.join()

使output等于:

'Bharath     Raju    Rohan    Sujeeth     Rahul      '

假设我理解这个问题......很难确定......

答案 1 :(得分:3)

看看Apache的StringUtils。它有填充空格(左或右)的方法。

答案 2 :(得分:3)

您可以使用sprintf,它被添加到Object类中,因此始终可用:

def s = sprintf("%-12s %-8s %-9s %-12s %-11s", name1, name2, name3, name4, name5)

assert s == "Bharath      Raju     Rohan     Sujeeth      Rahul      "

sprintf一起使用的格式字符串与用于Formatter类的格式字符串相同。有关详细信息,请参阅JDK documentation for the format string

答案 3 :(得分:2)

如前所述,您可以使用String.format()方法来实现目标。

例如:

    String[] strings = {
            "toto1",
            "toto22",
            "toto333",
            "toto",
            "totoaa",
            "totobbb",
            "totocccc",
    };
    String marker = "01234567890|";
    String output = "";
    for(String s : strings) {
        output += marker;
    }
    System.out.println(output);
    output = "";
    for(String s : strings) {
        output += String.format("%-12s", s);
    }
    System.out.println(output);

这将输出第一行,其中包含12个字符的标记,然后是第2行,带有预期的字符串:

01234567890|01234567890|01234567890|01234567890|01234567890|01234567890|01234567890|
toto1       toto22      toto333     toto        totoaa      totobbb     totocccc