2009-12-14 63 views
7

我正在用readLine()方法读取串行缓冲区。 readLine()返回的字符串格式为“str1:str2”。在while循环,当我用的时间的readLine()号串口命令的响应,我得到奇怪的输出是这样的:在java中格式化字符串

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

但我需要格式化如下

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

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

我很抱歉如果我的问题解释很奇怪。但是,如果有人了解这个问题,你可以建议如何去做?

回答

6
+1

我用String.format()和它的工作。但另一个问题在那里。问题是我把输出字符串放在一个JTextArea实例中。我选择了Arial字体。当打印像这样String.format(“% - 30s:%30s”,temp [0],temp [1]); 它打印如 图像名称:基本Linux固件 版本:2.1.1.17 在上述两行中,单词Image中的“I”和单词Version中的“V”在文本区域具有不同的宽度。所以,即使我使用30个字符的字符串冒号不对齐。有没有解决方案? – 2009-12-14 08:04:13

+0

看一看java.awt.FontMetrics(可能......自从我关心文本字段/区域的宽度以来,已经很长时间了:)-) – TofuBeer 2009-12-14 09:04:21

+1

您需要使用诸如Courier这样的字体,这被称为一个'monospaced'字体意味着所有的字符都有相同的宽度。这当然意味着如果字符在字符串中对齐,那么它也会在输出上对齐。 – 2009-12-14 09:33:09

18

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

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

这将输出:

Name :  Nemo 
Age :  120 

另见文档中的Formatter类,以了解更多关于格式的字符串语法。

+0

感谢您的回答。 我可以得到存储在字符串中的格式化输出,而不是发送到System.out流吗?有没有API? – 2009-12-14 06:26:21

+2

您可以使用String.format()与System.out.format()相同的方式以String形式获取结果。 – tangens 2009-12-14 06:32:16

+0

用于链接到java.util.Formatter的+1,它可能比System.out的格式()或printf()更有用,因为它可以格式化为任意流,并且在帖子中不清楚目标是什么输出是。 – charstar 2009-12-14 06:38:24

4

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

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

+0

我喜欢这里第一个参数的正确理由! – 2016-03-11 19:21:32