【问题标题】:Padding zeros in front of number prefixed by alphabetic string在以字母字符串为前缀的数字前面填充零
【发布时间】:2017-07-29 15:03:24
【问题描述】:

我有一个字符串,即 AB1234。我正在尝试创建一种方法,我可以将字符串传递到该方法中,该方法将始终在整数前面填充零以创建 10 位字符串。

一些例子:

padZero("AB1234") 返回“AB00001234”

padZero("CD001234") 返回“CD00001234”

padZero("ABCDEF858") 返回“ABCDEF0858”

有没有一种简单的方法可以做到这一点,而不必尝试捕捉大量的极端情况?假设在方法调用之前捕获到传递给该方法的大于十位的字符串的情况。

【问题讨论】:

  • 源字符串超过10位怎么办?
  • 假设将字符串传递给此方法的人已经检查过该字符串是否小于十位。

标签: java string number-formatting


【解决方案1】:
public static void main(String[] args) {
    System.out.println(padZero("abc123"));
}

public static String padZero(String init) {
    Matcher matcher = Pattern.compile("\\d+").matcher(init);
    matcher.find();
    return String.format("%s%0" + (10-matcher.start()) + "d", init.substring(0, matcher.start()), Integer.valueOf(matcher.group()));
}

【讨论】:

    【解决方案2】:

    以防万一您不想做出假设,而是在无效输入字符串上快速失败:

    private static final Pattern STRING_FORMAT = Pattern.compile("(\\D+)(\\d+)");
    
    public static final String padZeros(String s) {
        Matcher matcher = STRING_FORMAT.matcher(s);
        if (!matcher.matches() || s.length() > 10)
            throw new IllegalArgumentException("Invalid format");
        char[] result = new char[10];
        Arrays.fill(result, '0');
        String nonDigits = matcher.group(1);
        String digits = matcher.group(2);
        nonDigits.getChars(0, nonDigits.length(), result, 0);
        digits.getChars(0, digits.length(), result, 10 - digits.length());
        return String.valueOf(result);
    }
    

    【讨论】:

      【解决方案3】:

      我认为最简单的方法是找到第一个数字,然后插入足够的零来填充到 10 个数字:

      if (text.matches("\\d")) {
          while (text.length() < 10) {
              text = text.replaceFirst("(\\d)", "0$1");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-19
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 2021-02-19
        • 1970-01-01
        相关资源
        最近更新 更多