2016-02-26 53 views
0

我正在打印三列字符串。如何组织第一列字符串大小完全随机的输出,并使其不会扭曲列之间的距离?如何整齐排列字符串变量的输出?

我不知道很多java类的方法。对于Java以及一般的软件开发,我是相当新的。

来源:

//just printing out the data with the string I built "String p" 
//don't mind dividing them into three strings 



     while (true) { 
         tok = lex.nextToken(); 

         String p = TokenType.tokens.get(tok.getKind()) + 
            " left: " + tok.getLeftPosition() + 
            " right: " + tok.getRightPosition() + " "; 

          if ((tok.getKind() == Tokens.Identifier) || 
           (tok.getKind() == Tokens.INTeger) || 
           (tok.getKind() == Tokens.FLoat)) 
          p += tok.toString(); 

         System.out.println(p + " line:"+lex.source.getLineno()); 

        } 

下面是样本输出给一些想法。
我至少想要第二列对齐。

OUTPUT:

READLINE: program if == float f 
program left: 0 right: 6 line:1 
if left: 8 right: 9 line:1 
== left: 11 right: 12 line:1 
float left: 14 right: 18 line:1 
<id> left: 20 right: 20 f line:1 
+0

左右使用类似\ t(标签)的东西,以便您可以对齐。 – Aajan

+0

Aajan,谢谢你的工作。 – localplutonium

+0

这是一个简单的解决方案。但并不真正满足我所要求的。我在问如何对齐它们。没有第二列字符串将完美对齐。这个解决方案对我的程序来说足够好了。 – localplutonium

回答

1

使用printf()String.format(),或底层Formatter

System.out.printf("%-10s left: %-2d right: %-2d %-3s line: %d%n", 
        TokenType.tokens.get(tok.getKind()), 
        tok.getLeftPosition(), 
        tok.getRightPosition(), 
        (tok.getKind() == Tokens.Identifier || 
        tok.getKind() == Tokens.INTeger || 
        tok.getKind() == Tokens.FLoat ? tok.toString() : ""), 
        lex.source.getLineno()); 

取出-体征为右对齐。