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());

         }
      });
   }
}
4

2 に答える 2

3

以下は、文字列をスペースで右パディングする例です。

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|

また、別の回答で述べたように、すべてを正しく配置するには、等幅フォントを使用する必要があります。

以下は、等幅ではないフォントの 10 文字の 2 行です。

wwwwwwwwwwwwwwwwwwwwwwww
_

そして、等幅フォントの同じ 2 行:

wwwwwwwwww
iiiiiiiiii
于 2013-03-06T15:22:41.797 に答える
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 の前にあるトークンについても同じことを行う必要があります。

編集: また、画像を見てから、出力で固定幅フォントを使用する必要があります。それ以外の場合は、レンダリングされたテキストの幅をピクセル単位で計算する必要があります。はるかにトリッキーな問題。

EDIT 2:固定幅でない場合、幅は実際には文字列の内容に依存するため、フォントは重要です。次のことを考慮してください (標準のブラウザで標準のフォントを使用していると仮定します)。

lllll は 5 文字の長さ
でした mmmmm は 5 文字の長さでした

対。

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

アライメントの問題が見えますか?

于 2013-03-06T14:48:14.093 に答える