当前位置: 首页 > 面试题库 >

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

鞠泰平
2023-03-14
问题内容
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();
    }
}


 类似资料:
  • 问题内容: 我在Java中使用String.format()尝试模拟C语言中可用的printf()控制通道。我了解如何指定将字符串放置在20个字符,5个,2个…的字段中, 3位小数,2位等。但是,字符串在其字段中右对齐打印。 如何将弦左对齐? 这里是一个可能的输出,我想修改左对齐的例子,并在各自的领域。 *注意:请将“-”视为空白 问题答案: 与printf相同-使用格式的修饰符

  • 函数名称:格式化字符串 函数功能:将字符串进行格式化,返回一个类似 printf 的格式化字符串 函数方法 st = string.find(str,arg) 参数 类型 必填 说明 str string 是 待格式化的字符串/模式匹配 arg - 是 任意内容,需要与 str 模式匹配支持的类型(number/string)相同 模式匹配用法 参数 类型 %c 接收一个数字, 并将其转化为 AS

  • 我们可以使用StreamApi将上面的字符串转换为字符流吗?

  • 我一直在准备技术面试。所以有一件事我不确定。如果我写一个例子 这是否已经防止了字符串注入?或者我必须这样写: 提前道谢!

  • 在我的java课上,我们写了一个卡片程序,在这个程序中,你可以选择一张“秘密卡片”,最后它会告诉你你的秘密卡片是什么。我只有一个问题,那就是格式化输出。到现在为止,当它打印第一列时,第一列是偶数,但第二列和第三列不是。我的老师说要使用空格,但我试过了,不起作用。我知道有一种方法可以格式化它,但我不确定。输出看起来像这样: 我的输出代码如下: 如果你愿意,我可以发布整个代码,但我尽量不发布太多。我非

  • 嗨,我尝试将以下Source类映射到以下Destation类。我使用了以下映射以将字符串值映射到列表字符串。它没有正确映射。我需要知道如何使用Dozer将2个字符串值映射到一个目标字符串列表中。