4

朋友们我在项目中要暗示一些东西,我发现了一些困难,如下:

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 个黑色空间,长度为 11(5+6),

4

4 回答 4

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      '

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

于 2012-07-23T12:55:01.587 回答
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 文档

于 2012-07-23T18:07:45.997 回答
3

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

于 2012-07-23T12:54:15.857 回答
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 个字符的标记的第一行,然后输出带有预期字符串的第二行:

01234567890|01234567890|01234567890|01234567890|01234567890|01234567890|01234567890|
toto1       toto22      toto333     toto        totoaa      totobbb     totocccc    
于 2012-07-23T13:42:18.830 回答