2016-12-26 5 views
-1

Ich versuche, eine Zeichenfolge zu drucken, wobei die Feldbreite durch eine Variable angegeben wird und nicht in der Formatzeichenfolge fest codiert ist. Außerdem möchte ich, dass printf die Zeichenfolge in einer neuen Zeile startet.Konstruieren Sie dynamisch ein Format String für printf mit n

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

Ausgang (der anfängliche Newline zeigt nicht in den Stackoverflow-Formatierer up):

>Hello World      < 

Die cheverons hier nicht Befehlszeile aufgefordert, sondern sind optisch die Breite des Feldes bestätigen.

Wenn ich jedoch versuche, die Formatzeichenfolge dynamisch zu konstruieren, kann ich, solange ich die richtigen Escape-Sequenzen sehen kann, nicht die ursprüngliche & neue Zeilenzeichen zurückgeben, um tatsächlich eine Rückkehr & neue Zeile zu verursachen.

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"); 
    } 

} 

Ausgang:

\r\n>Hello World      < 

Ich erhalte die wörtliche \ n output \ r.

Kann mir jemand sagen, was die richtige Technik ist?

+0

Mögliches Duplikat von [Wie Strings in Java zu formatieren] (http://stackoverflow.com/questions/6431933/how-to-format-strings-in-java) – DimaSan

+1

ich nicht bekommen es ... warum benutzt du '\\ r \\ n', obwohl du wusstest, dass' \ r \ n' richtig funktioniert? – Tom

Antwort

0

Nicht fest codieren "\r\n", das ist nur ein richtiger Zeilentrenner für Windows. Verwenden Sie %n. Wie,

String myFormat = "%n>%-" + TEXT_LENGTH+ "s<";