如何使用String.format居中字符串? [英] How to center a string using String.format?
本文介绍了如何使用String.format居中字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
public class Divers {
public static void main(String args []){
String format =|%1 $ -10s | %2 $ -10s |%3 $ -20s | \\\
;
System.out.format(格式,FirstName,Init。,LastName);
System.out.format(格式,Real,,Gagnon);
System.out.format(格式,John,D,Doe);
String ex [] = {John,F.,Kennedy};
System.out.format(String.format(format,(Object [])ex));
$输出:
|名字|初始化|姓氏|
| Real | | Gagnon |
| John | D | Doe |
| John | F。 |肯尼迪|
我希望输出能够居中。如果我不使用 - 标志,则输出将与右侧对齐。
我没有在API中找到将文本居中的标志。
解决方案我很快破解了这个。您现在可以在 String.format
中使用 StringUtils.center(String s,int size)
。
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),(moon));
assertThat(StringUtils.center(phone,14,'*'),is(**** phone *****));
assertThat(StringUtils.center(India,6,' - '),(India-));
assertThat(StringUtils.center(Eclipse IDE,21,'*'),是(***** Eclipse IDE *****));
$ b $ @ @
public void worksWithFormat(){
String format =|%1 $ -10s |%2 $ -10s |%3 $ - 20S | \\\
;
assertThat(String.format(format,StringUtils.center(FirstName,10),StringUtils.center(Init。,10),StringUtils.center(LastName,20)),
是(| FirstName | Init。| LastName | \\\
));
$ b $ class StringUtils {
public static String center(String s,int size){
return center(s,大小,);
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();
}
}
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));
}
}
output:
|FirstName |Init. |LastName |
|Real | |Gagnon |
|John |D |Doe |
|John |F. |Kennedy |
I want the output to be centered. If I do not use '-' flag the output will be aligned to the right.
I did not find a flag to center text in the API.
This article has some information about format, but nothing on centre justify.
解决方案 I quickly hacked this up. You can now use StringUtils.center(String s, int size)
in 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居中字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文