在 Java 6 中,如何在不使用 String.format 的情况下格式化左侧填充的数字?

发布于 2024-10-20 13:01:27 字数 322 浏览 2 评论 0原文

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

For example, I need to grab an unknown number, let's say 3, and find the binary (2^3) - 1 times, from 0 to 111 (0-7). Obviously, the number of digits I need depends on whatever number 'n' in 2^n.

So, if the number is 3, I would need the output to be:

000
001
010
011
100
101
111

Now obviously I can do this manually with a String.format("%03d", NumberInBinary) operation, but that's hardcoding it for 3 digits. I need to do the equivalent code with an unknown number of digits, how can I do that? (as in String.format("%0nd", yournumber) where n is the number of digits.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦归所梦 2024-10-27 13:01:27

如果 n = 4,则二进制数 = 101;

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

带输出

0101

if n = 4, NumberInBinary = 101;

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

with output

0101
开始看清了 2024-10-27 13:01:27

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

Why not make use of the already built-in Integer.toBinaryString() and just manually add the zeros using a 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();
}
避讳 2024-10-27 13:01:27

您可以使用递归:

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

You could use recursion:

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

and then call enumerate("", numberOfDigits);

faster, using 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);
    }
}

and then call enumerate(new StringBuffer(), numberOfDigits);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文