2013-03-06 169 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