【问题标题】:Java pad string with space带空格的 Java 填充字符串
【发布时间】:2021-05-20 00:43:40
【问题描述】:

我正在尝试向字符串添加填充,但是我不知道如何执行此操作。我的目标是拥有这样的东西:

首页:email@gmail.com(冒号后 7 个空格)

上面有 "Home:" 硬编码,应该有 7 个空格以及一个用于电子邮件的变量。这是我目前所拥有的:

return String.format("Home:%7s", email);

我的理解是%7s 是添加值为 7 的左填充,然后我有 s 用于我想要在填充之后包含的字符串。有人可以帮我纠正一下吗?

看起来很像这样:

Home:email@gmail.com

所以发生的事情是当我有这样的东西时,一切看起来都很好:

return String.format("Home:%7s", "email");

当我添加我的变量而不是硬编码“电子邮件”时,我完全失去了填充。

【问题讨论】:

  • 希望这会有所帮助:baeldung.com/java-pad-string
  • How to Ask: 你应该自己研究一下:在网上搜索java pad string 会找到像 Baeldung.com 这样的教程????如果仍未找到,请说明您发现、尝试过但仍然错误或缺失的内容。
  • 我有,但我无法弄清楚,因此在这里发布我尝试过的示例并要求澄清。
  • 您是否阅读了类java.lang.String 中方法formatjavadoc?它包含一个link对语法的非常详细的解释。
  • @hc_dev 我在上面更新了我的问题。我不确定如何在填充之前有一个字符串以及如何替换字符串变量来呈现电子邮件。

标签: java string-formatting padding


【解决方案1】:

您的 template 用 format-literal 表示似乎有效。见demo on IDEone

String expected = "Home: email@gmail.com"; // (7 spaces after the colon)
String email = "email@gmail.com";
assert expected == String.format("Home:%7s", email);

变量的使用&插入空格

注意email 变量是如何作为参数 传递给format 方法以将其合并到模板中的。

要在冒号之后和填充之前插入 空格,只需将其添加到 模板 中,如下所示:String.format("Home: %7s", email)

间距

评论

//(冒号后7个空格)

可以通过填充来实现:将空字符串"" 填充为7,格式为%7s。结果始终是 7 个空格。因此,您可以通过插入常量直接注入 7 个空格 static final String SPACES_7 = " "; 在冒号之后,例如: String ouput = "Home:" + SPACES_7 + email; 但是没有填充效果。

这称为间距。在元素之间添加空间。这里的有效输出总是 5+7 长加上可变的电子邮件长度。您的 label "Home:" 和 value email 之间的间距为 7。

填充

如果你将 15 个字符的 string 填充到 7 个字符,那么效果将是 no padding,因为 string 已经更长了比给定的填充大小。

在你想要的问题中

字符串添加s [占位符] 我想在填充后包含

⚠️ 填充不在字符串之前或之后(添加)!

Padding 扩展 字符串的输出空间以保证最小宽度(截断的反义词=最大宽度)。 它通过用 pad-char 填充空间(左侧或右侧)来实现。 填充的目的通常是对齐(左、右、中心)。

在您的电子邮件用例中,这将添加字符(此处:空格)以具有 固定大小的输出并对齐电子邮件地址,因此当多行垂直堆叠时它们会对齐。

要实现有效的padding,应该选择大于等于字符串的padding-size。否则较长的字符串可能会超出填充大小(这不是填充的目的)。

请参阅demo on IDEone,当电子邮件长度为 15 时,它将在左侧添加 5 个空格以实现固定大小的输出、右对齐或仅填充 20。

另见

【讨论】:

    【解决方案2】:

    希望这可能会有所帮助

        String email = "abc@jhkj.com";
        System.out.println(String.format("Home:%1$3s%s%s", "", email));
    

    输出: Home: abc@jhkj.com

    【讨论】:

    • 这确实有帮助,是的,我很感激。我只认为我需要 '%7s' 来指示我需要的所需间距?
    • 您的格式文字(模板)实际上添加了 3 个空格,例如 String.format("%3s", "")。我认为我们应该通过 padding 来澄清我们所理解的内容? 因为填充到下面任何内容(如 7 或 3)的 12 个字符的字符串将导致所有 12 个字符的输出。
    • 这只是一个我同意你@hc_dev的术语,但在这里我们应该了解用户的期望,而不是关注他们使用了哪些术语。
    • @Its Andrew 你可以使用 MARGIN 来定义邮件之前的额外空间。
    • @Koushlendra 确切地说,术语是我们(开发人员)在代码中进行交流的方式。同意:关注用户的期望!此外:首先与他们澄清,然后解释并(重新)指导他们,例如“您要求MARGIN而不是padding。想象其他人寻求SO帮助并找到这个__question”Java pad字符串空格”回答:“通过添加 3 个空格来使用固定的 MARGIN”". What did they learn about java string padding` 那么呢?
    猜你喜欢
    • 2012-07-21
    • 2012-10-11
    • 1970-01-01
    • 2017-08-29
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多