如何在Java 6中不使用String.format格式化左边填充的数字?

时间:2011-03-04 23:26:57

标签: java binary padding

例如,我需要获取一个未知数字,比方说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是位数。)

3 个答案:

答案 0 :(得分:5)

如果n = 4,则NumberInBinary = 101;

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

带输出

0101

答案 1 :(得分:1)

为什么不使用已经内置的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();
}

答案 2 :(得分:0)

你可以使用递归:

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);