我正在尝试格式化字符串,因为它们到达并符合某些条件。但是如果下面的代币长度不一样,那么就不配了,我该怎么做?我想要所有的“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());
}
});
}
}
答案 0 :(得分: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
答案 1 :(得分:1)
考虑在格式字符串中指定 width ,并在格式中包含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:字体很重要,因为如果它不是固定宽度,宽度实际上取决于字符串的内容。请考虑以下情况(假设您在标准浏览器上使用标准字体):
lll这是五个字符长 mmmmm,长度为五个字符
VS
lllll that was five characters long
mmmmm that was five characters long
查看对齐问题?