如何使用String.format居中字符串? [英] How to center a string using String.format?

查看:490
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆