【问题标题】:Java String.Format Specifications [duplicate]Java String.Format 规范 [重复]
【发布时间】:2017-12-06 03:04:57
【问题描述】:

我花了一段时间搜索谷歌。它导致了这里和其他地方的一些文章。 我正在寻找使用字符串格式引擎(或者应该调用它 - 如果您知道,请给我正确的术语)来获取输入字符串的结尾而不是字符串的开头..

例子:

System.out.printf("[%tY/%<tm/%<td-%<tH.%<tM.%<tS][%-20.20s] %s%n", new Date(), "long.string.class.test.TestClass", "Content Test...");

输出:

[2017/12/05-21.49.11]"[long.string.class.te] Content Test...

而我想要:

[2017/12/05-21.49.11]"[class.test.TestClass] Content Test...

此外,我很好奇如果字符串超过 20 个字符的限制,是否也可以将前 3 个字符替换为 '...'。

【问题讨论】:

  • 所以你想要从 "long.string.class.test.TestClass" 右侧开始的 20 个字符?这听起来像你真的想要一些与你所要求的不同的东西。你真正需要做什么?
  • 我将此标记为重复,请查看其他问题和答案,看看它们是否对您有帮助。
  • @xtratic,您的问题的答案是肯定的。此外,我希望通过 String.format 做到这一点,这就是为什么我按照我的方式命名和标记它。如果浪费时间或不清楚,请道歉。
  • @xtratic 虽然我同意这是重复的,但似乎该解决方案不使用 String.format 来完成任务,您可以通过格式化程序帮助执行此操作吗有机会吗?
  • 没关系。我认为printf() 无论如何都会调用String.format(),但我面前没有Java 源代码。我要添加一个答案,因为我要输入更多内容。或者说,吉姆的帖子基本上就是我要说的。

标签: java printf string.format


【解决方案1】:

您不能仅在格式字符串中执行此操作,您必须传递要打印的文本。这并不难......

    String[] data = { "a short string", "a very long string to see that we get only the last 20 characters" };

    for (String s : data)
    {
        System.out.println("....:....|....:....|");
        System.out.printf("%20s\n",s.substring(Math.max(0, s.length()-20)));
    }

如果您不想要固定长度,请调整为 %s,如果需要,请调整为 %-20s 左对齐。

输出:

....:....|....:....|
      a short string
....:....|....:....|
e last 20 characters

【讨论】:

  • 很公平,我希望只使用格式化程序的东西,但谢谢。很抱歉浪费了时间。
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多