如何使用String.format将字符串居中?

public class Divers {

public static void main(String args[]){

String format = "|%1$-10s|%2$-10s|%3$-20s|\n";

System.out.format(format, "FirstName", "Init.", "LastName");

System.out.format(format, "Real", "", "Gagnon");

System.out.format(format, "John", "D", "Doe");

String ex[] = { "John", "F.", "Kennedy" };

System.out.format(String.format(format, (Object[])ex));

}

}

输出:

|FirstName |Init.     |LastName            |

|Real | |Gagnon |

|John |D |Doe |

|John |F. |Kennedy |

我希望输出居中。如果我不使用’-‘标志,则输出将向右对齐。

我在API中找不到将文本居中的标志。

该文章有关于格式的一些信息,但没有对中心自圆其说。

回答:

我很快就搞定了。您现在可以StringUtils.center(String s, int size)在中使用String.format

import static org.hamcrest.CoreMatchers.*;

import static org.junit.Assert.assertThat;

import org.junit.Test;

public class TestCenter {

@Test

public void centersString() {

assertThat(StringUtils.center(null, 0), equalTo(null));

assertThat(StringUtils.center("foo", 3), is("foo"));

assertThat(StringUtils.center("foo", -1), is("foo"));

assertThat(StringUtils.center("moon", 10), is(" moon "));

assertThat(StringUtils.center("phone", 14, '*'), is("****phone*****"));

assertThat(StringUtils.center("India", 6, '-'), is("India-"));

assertThat(StringUtils.center("Eclipse IDE", 21, '*'), is("*****Eclipse IDE*****"));

}

@Test

public void worksWithFormat() {

String format = "|%1$-10s|%2$-10s|%3$-20s|\n";

assertThat(String.format(format, StringUtils.center("FirstName", 10), StringUtils.center("Init.", 10), StringUtils.center("LastName", 20)),

is("|FirstName | Init. | LastName |\n"));

}

}

class StringUtils {

public static String center(String s, int size) {

return center(s, size, ' ');

}

public static String center(String s, int size, char pad) {

if (s == null || size <= s.length())

return s;

StringBuilder sb = new StringBuilder(size);

for (int i = 0; i < (size - s.length()) / 2; i++) {

sb.append(pad);

}

sb.append(s);

while (sb.length() < size) {

sb.append(pad);

}

return sb.toString();

}

}

以上是 如何使用String.format将字符串居中? 的全部内容, 来源链接: utcz.com/qa/429830.html

回到顶部