【问题标题】:How to format string to a particular pattern如何将字符串格式化为特定模式
【发布时间】:2013-07-03 16:07:40
【问题描述】:

假设我有一个输入字符串,我需要像这样格式化它:

### ### ############........etc

所以它必须有前三个字符,然后是一个空格,然后是另外三个字符,空格,然后是其余的。是否有第三方库或 JDK 类能够做到这一点?

我正在尝试使用正则表达式

System.out.println(inputString.replaceAll(".{3}", "$0 "));

但它不起作用,因为结果是

### ### ### ### ### etc.

【问题讨论】:

  • String.format("%s %s %s", s.substring(0, 3), s.substring(3, 6), s.substring(6));

标签: java string string-matching


【解决方案1】:

你可以这样做:

System.out.println(inputString.replaceFirst("(.{3})(.{0,3})", "$1 $2 "));

说明:

正如$0 是整个匹配字符串一样,$1$2 分别是括号中的第一个和第二个匹配项。

我将 {3} 修改为 {0,3},因此 6 个字符或更短的字符串也可以工作(但是,当字符串介于 4 到 6 个字符之间时,它会添加一个尾随空格,可以使用 .trim() 删除(这可以有不需要的其他效果)或更复杂的东西)。

希望其余部分不需要解释,因为它与您的代码非常相似,但如果您不确定,请随时询问。 Java regex reference.

示例:

System.out.println("12345678901234567890".replaceFirst("(.{3})(.{0,3})", "$1 $2 "));
System.out.println("12".replaceFirst("(.{3})(.{0,3})", "$1 $2 "));
System.out.println("12345".replaceFirst("(.{3})(.{0,3})", "$1 $2 "));

打印:

123 456 78901234567890
12
123 45 

【讨论】:

  • 这很酷,但是当输入字符串短于 6 个字符时,它会以 ##### 格式返回。所以我认为@damo 的评论更好。
  • @Behnil 查看编辑,特别是"I modified the {3} to {0,3}..."
【解决方案2】:

你可以使用:

String formattedStr = "%s %s %s";
        inputStr = String.format(formattedStr ,inputStr.substring(0,3),inputStr.substring(3,6),inputStr.substring(6) );

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 2011-09-27
    • 2017-04-09
    • 2019-08-18
    • 2018-09-27
    • 1970-01-01
    • 2017-08-21
    • 2018-01-02
    相关资源
    最近更新 更多