0

私は Java を学んでいて、このばかげた小さな問題に多くの時間を費やしてきました。文字列出力の左側をスペースで動的にパディングしようとしているため、表示されるすべての値が左にパディングされます。問題は、ユーザーが値を入力するまで値の長さがわからないことです。

これが私がやろうとしていることの例です。nLongestString は表示している最長の文字列の長さで、strValue は文字列自体の値です。これは動的にはまったく機能しません。nLongestString の値をハードコーディングすると機能しますが、文字列の長さが常にわからないため、それはできません。

 System.out.printf("%"+nLongestString+"s", strValue + ": ");

出力は次のようになります。

thisisalongstring:
       longstring:
            short:
4

2 に答える 2

1

私はあなたの問題を見ていません。以下は私にとってはうまくいきます。(Java 7)

編集: の値を確認しましたnLongestStringか? あなたが思っているようには設定されていないと思います。

    String[] arr = { "foo", "bar", "foobar" };

    int max = 0;

    for( String s : arr ) {
        if( s.length() > max ) {
            max = s.length();
        }
    }

    for( String s : arr ) {
        System.out.printf(  ">%" + max + "s<%n", s );
    }

    Random random = new Random( System.currentTimeMillis() );
    // just to settle the question of whether it works when 
    // Java can't know ahead of time what the value will be
    max = random.nextInt( 10 ) + 6;

    for( String s : arr ) {
        System.out.printf(  ">%" + max + "s<%n", s );
    }
}

出力:

>   foo<
>   bar<
>foobar<
// the following varies, of course
>     foo<
>     bar<
>  foobar<
于 2013-10-12T22:38:49.580 に答える
0

すでにデータがある場合は、単語の最大長を見つけてから印刷するだけです。ここにコードサンプルがあります

// lets say you have your data in List of strings
List<String> words = new ArrayList<>();
words.add("thisisalongstring");
words.add("longstring");
words.add("short");

// lets find max length
int nLongestString = -1;
for (String s : words)
    if (s.length() > nLongestString)
        nLongestString = s.length();

String format = "%"+nLongestString+"s:\n";// notice that I added `:` in format so 
                                        // you don't have to concatenate it in 
                                        // printf argument

//now lets print your data
for (String s:words)
    System.out.printf(format,s);

出力:

thisisalongstring:
       longstring:
            short:
于 2013-10-12T22:56:23.540 に答える