2016-12-26 3 views
-1

書式文字列にハードコードされているのではなく、変数によってフィールド幅が指定された文字列をprintfしようとしています。さらに、printfが新しい行の文字列を開始するようにしたい。は、 nを含むprintfの書式文字列を動的に構築します。

System.out.printf("\r\n>%-32s<", "Hello World"); //works ok 

出力(初期改行はstackoverflowのフォーマッタに表示されません):

>Hello World      < 

ここcheveronsはラインプロンプトコマンドが、視覚的にフィールドの幅を確認しているされていません。

しかし、正しいエスケープシーケンスを見る限りでは、フォーマット文字列を動的に構築しようとすると、実際に戻り値&改行を返すために、最初の戻り値&改行文字を取得できません。

import java.util.*; 

class DynamicFormatStringTest { 

    private static final int TEXT_LENGTH = 32; 

    public static void main(String[] args){  
    String myFormat = "\\r\\n>%-" + TEXT_LENGTH+ "s<"; 
    //System.out.println(myFormat);       //prints \r\n>%-32s< 
    System.out.printf(myFormat, "Hello World"); 
    } 

} 

出力:

\r\n>Hello World      < 

私はリテラル\ rを\ nの出力を取得しています。

誰でも正しい技術が何であるか教えてください。

+0

可能な重複私は得ることはありません[どのようにJavaで文字列をフォーマットする](http://stackoverflow.com/questions/6431933/how-to-format-strings-in-java) – DimaSan

+1

それは... \ r \ nが正しく動作することを知っていたのになぜ '\\ r \\ n'を使うのですか? – Tom

答えて

0

"\r\n"をハードコードしないでください。これは、Windows用の正しい行区切り記号です。 %nを使用してください。のと同様に、

String myFormat = "%n>%-" + TEXT_LENGTH+ "s<"; 
関連する問題