【问题标题】:Formatting strings in java在java中格式化字符串
【发布时间】:2010-12-26 07:53:32
【问题描述】:

我正在使用 readLine() 方法读取串行缓冲区。 readLine() 返回的字符串格式为“str1 : str2”。在 while 循环中,当我使用 readLine() 次数来响应串行端口命令时,我得到如下奇怪的输出:

String1 : string1
SString11 : String2
StringString2 : String23 
String4 : String5

但我需要如下格式的输出

String1       : string1
SString11     : String2
StringString2 : String23 
String4       : String5

我在字符串上使用了 split 方法,并将两个字符串用分隔符分隔为':'。但是现在我需要在 String1 后面加上空格来对齐所有的冒号。

如果我的问题解释很奇怪,我很抱歉。但是如果有人理解这个问题,你能建议怎么做吗?

【问题讨论】:

    标签: java string


    【解决方案1】:

    最简单的方法是使用System.out.format()。这使您可以使用 C printf 样式格式说明符。一个例子:

    System.out.format("%-5s:%10s\n", "Name", "Nemo");
    System.out.format("%-5s:%10d\n", "Age", 120);
    

    这将输出:

    Name :      Nemo
    Age  :       120
    

    另请参阅Formatter 类的文档以了解有关格式字符串语法的更多信息。

    【讨论】:

    • 感谢您的回答。我可以获取存储在字符串中的格式化输出而不是发送到 System.out 流吗?有 API 吗?
    • 您可以像使用 System.out.format() 一样使用 String.format() 来获取字符串形式的结果。
    • +1 用于链接到 java.util.Formatter 这对于问题发布者可能比 System.out 的 format() 或 printf() 更有用,因为它可以格式化为任意流并且在帖子输出的目的地是什么。
    • @Surjya Narayana Padhi 要获取存储在字符串中的格式化输出,请使用 String.format()。
    • 我使用了 String.format() 并且它有效。但还有另一个问题。问题是我将输出字符串放在 JTextArea 实例中。我选择了 Arial 字体。当像这样打印 String.format("%-30s:%30s",temp[0],temp[1]);它打印为 Image Name : Basic Linux firmware Version : 2.1.1.17 在上面两行中,单词 Image 中的“I”和单词 Version 中的“V”在文本区域的宽度不同。因此,即使我使用 30 个字符串,冒号也没有对齐。有什么解决办法吗?
    【解决方案2】:

    【讨论】:

    • 我使用了 String.format() 并且它有效。但还有另一个问题。问题是我将输出字符串放在 JTextArea 实例中。我选择了 Arial 字体。当像这样打印 String.format("%-30s:%30s",temp[0],temp[1]);它打印为 Image Name : Basic Linux firmware Version : 2.1.1.17 在上面两行中,单词 Image 中的“I”和单词 Version 中的“V”在文本区域的宽度不同。因此,即使我使用 30 个字符串,冒号也没有对齐。有什么解决办法吗?
    • 看看 java.awt.FontMetrics (也许……我已经很久没有关心文本字段/区域的宽度了 :-)
    • 您需要使用像 Courier 这样的字体,这被称为“等宽”字体,意思是所有字符的宽度都相等。这当然意味着如果你的字符在字符串中对齐,那么输出也会对齐。
    【解决方案3】:

    System.out.format("%30s : %s", str1, str2);

    将打印第一个固定宽度为 30 个字符的字符串。

    【讨论】:

    • 我喜欢这里第一个参数的正确对齐方式!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2011-09-19
    • 2012-08-16
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多