【问题标题】:How can I neatly align the output of string variables?如何整齐地对齐字符串变量的输出?
【发布时间】:2016-02-26 04:37:40
【问题描述】:

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

我不知道很多 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() );

                    }

这里是示例输出,以提供一些想法。
我至少希望第二列对齐。

输出:

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

【问题讨论】:

  • 在左右前后使用 \t(制表符)之类的东西,以便对齐。
  • Aajan,谢谢,效果很好。
  • 这是一个简单的解决方案。但并没有真正满足我的要求。我在问如何对齐它们。从来没有第二列字符串会完全对齐。不过,该解决方案对我的程序来说已经足够了。

标签: java string output


【解决方案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());

删除- 符号以右对齐。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多