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 で回答が必要です。

"Bharath     Raju    Rohan    Sujeeth     Rahul     "

意味:

長さが 12 (7+5 = 12) であるため、Bharath は 5 つの黒いスペースに進みます。

長さが 8 (4+4 = 8) であるため、Raju は 4 つの黒いスペースに進みます。

長さは9(5 + 4)であるため、ローハンは4つの黒いスペースに進みます。

長さが 12 (7+5) であるため、Sujeeth は 5 つの黒いスペースに進みます。

長さが 11(5+6) であるため、Rahul は 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

Apache のStringUtilsを見てください。スペースをパディングするメソッドがあります (左または右)。

于 2012-07-23T12:54:15.857 に答える
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 に答える
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    
于 2012-07-23T13:42:18.830 に答える