2013-03-06 115 views
1

我試圖格式化字符串,因爲它們到達並符合特定條件。但是,如果下面的令牌長度不同,則不匹配,我該怎麼做?我希望所有的「IP地址」匹配。我假設我使用類似%20s的東西?格式字符串

if (tokens.length == 4 && (tokens[3].equals("up") || tokens[3].equals("down"))){ 
    String result = String.format("%s is %s. IP address: %s \n", tokens[0], tokens[2], tokens[1]); 
    final String ReceivedText = mReceiveBox.getText().toString() + result; 

    if(tokens[2].equals("up")){ 
     runOnUiThread(new Runnable() { 
     public void run() { 
      mReceiveBox.setText(ReceivedText); 
      mReceiveBox.setSelection(ReceivedText.length()); 

     } 
     }); 
    } 
} 
+1

莫非你顯示一個輸出的例子不排隊? – 2013-03-06 14:46:01

+0

你在這裏,在右邊。 http://i.imgur.com/eBlr2Yt.png底部IP太早開始,我想在每一行的前一行和IP之間留出更多空間,最下面一行應該與之前的行對齊 – Paul 2013-03-06 14:53:11

+0

所以也許我應該改變一切到%s。 – Paul 2013-03-06 14:56:45

回答

1

考查在格式字符串指定寬度,並且包括mReceiveBox.getText().toString()在您的格式(而不是追加結果它)。

參見:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

你想要的東西,如落得:

String result = String.format("%20s%s is %s. IP address: %s \n", 
    mReceiveBox.getText().toString(), tokens[0], tokens[2], tokens[1]); 

其中20是用於接收信箱文本的最大寬度。您還需要對IP前面的令牌執行相同的操作。

編輯:另外,從看你的圖像,你正在做的需要在你的輸出中使用固定寬度的字體。否則,你將需要開始計算像素渲染文本的寬度。一個更棘手的問題。

編輯2:字體很重要,因爲如果它不是固定的寬度,寬度將實際上取決於您的字符串的內容。考慮以下(假設你使用一個標準的瀏覽器標準字體):

LLLLL,這是5個字符
MMMMM,這是5個字符

lllll that was five characters long 
mmmmm that was five characters long 

見對齊問題?

+0

我嘗試過類似String result = String.format(「%10s%2s%2s%s%2s%8s%s \ n」,令牌[0],「是」,令牌[2],「。」,「 IP「,」address:「,tokens [1]);雖然它更好,但它不是最好的。我不知道爲什麼字體寬度是一個問題?我知道東西是不同的寬度atm,但是當我嘗試\ t它將所有東西都排成一行時,所以我假設一些字符串格式方法也會這樣做,也許我只是認爲它們排隊了 – Paul 2013-03-06 15:14:43

+0

android:typeface =「monospace」伎倆感謝 – Paul 2013-03-06 15:24:04

+0

好,好。我剛剛編輯了答案來說明字體問題。 – pamphlet 2013-03-06 15:25:02

2

這裏是右填充帶有空格的字符串,例如:

System.out.println(String.format("%-40s", "SHORT TEXT") + "|"); 
System.out.println(String.format("%-40s", "SOME LONG TEXT") + "|"); 
System.out.println(String.format("%-40s", "SOME MUCH LONGER TEXT") + "|"); 

,輸出:

SHORT TEXT        | 
SOME LONG TEXT       | 
SOME MUCH LONGER TEXT     | 

-格式化標誌將左對齊文本。沒有它,輸出的樣子:

       SHORT TEXT| 
          SOME LONG TEXT| 
        SOME MUCH LONGER TEXT| 

此外,在另一個答覆中提到,您得你想要的一切正確對齊使用等寬字體

這裏是2行,每行10個字符的字體是等寬:

wwwwwwwwww
IIIIIIIIII

而那些相同2行以等寬字型:

wwwwwwwwww 
iiiiiiiiii 
+0

我試試這個,看起來和我在做的事情類似,所以我不知道爲什麼它不工作。我現在有一個等寬字體謝謝!機器人:字體=「等寬」 – Paul 2013-03-06 15:24:42