【问题标题】:How do I format a number left-padded without using String.format in Java 6?如何在 Java 6 中不使用 String.format 格式化左填充数字?
【发布时间】:2011-07-09 04:41:24
【问题描述】:

例如,我需要获取一个未知数,比如说 3,然后找到二进制 (2^3) - 1 次,从 0 到 111 (0-7)。显然,我需要的位数取决于 2^n 中的任何数字“n”。

所以,如果数字是 3,我需要输出为:

000
001
010
011
100
101
111

现在显然我可以使用 String.format("%03d", NumberInBinary) 操作手动执行此操作,但这是将其硬编码为 3 位数字。我需要用未知位数做等效代码,我该怎么做? (如 String.format("%0nd", yournumber) 其中 n 是位数。)

【问题讨论】:

标签: java binary padding


【解决方案1】:

如果 n = 4,NumberInBinary = 101;

String.format("%0"+n+"d", NumberInBinary);

有输出

0101

【讨论】:

  • 这里不包括枚举和二进制转换方面。
  • 另外,我不知道 NumberInBinary 会为此工作。
  • @Matthew 首先完整地阅读了这个问题。 n 和 NumberInBinary 已经可用于 OP。他只需要打印出来。
  • @Matthew 只输出二进制值,没有找到。
  • StackOverflowException 是正确的,我已经找到了二进制数。而且他的解决方案效果很好,我不知道你能做到这一点,而且这很有意义,因为引号的内部被视为字符串,所以 "%0"+n+"d" 完美地做到了这一点,适应了自己每个案例。谢了,兄弟。感谢 Matthew,您还帮助我了解了另一种查找二进制值的方法。我只是使用了一个for循环,从int i = 0开始,一直到2^n - 1,得到'i',使用Integer.toString(i, 2),解析它,并使用StackOverflowExceptions的方法输出它。跨度>
【解决方案2】:

你可以使用递归:

public static void enumerate(String prefix, int remaining) {
    if (remaining == 0) {
        System.out.println(prefix);
    } else {
        enumerate(prefix + "0", remaining - 1);
        enumerate(prefix + "1", remaining - 1);
    }
}

然后拨打enumerate("", numberOfDigits);

更快,使用 StringBuffer:

public static void enumerate(StringBuffer prefix, int remaining) {
    if (remaining == 0) {
        System.out.println(prefix.toString());
    } else {
        enumerate(prefix.append('0'), remaining - 1);
        prefix.deleteCharAt(prefix.length() - 1);
        enumerate(prefix.append('1'), remaining - 1);
        prefix.deleteCharAt(prefix.length() - 1);
    }
}

然后拨打enumerate(new StringBuffer(), numberOfDigits);

【讨论】:

    【解决方案3】:

    为什么不使用已经内置的 Integer.toBinaryString() 并使用 StringBuilder 手动添加零?

    public static void main(String[] args) {
        int max = 5;
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            String binary = Integer.toBinaryString(i);
            if (binary.length() > max) {
                break;
            }
            System.out.println( prefixWithZeros(binary, max) );
        }
    }
    
    static String prefixWithZeros(String binary, int n) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n - binary.length(); i++) {
            sb.append('0');
        }
        return sb.append(binary).toString();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-18
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多