2009-12-14 101 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