Как отформатировать число с левой стороны без использования String.format в Java 6? - PullRequest
2 голосов
/ 05 марта 2011

Например, мне нужно взять неизвестное число, скажем, 3, и найти двоичный файл (2 ^ 3) - 1 раз, от 0 до 111 (0-7).Очевидно, что количество цифр, которое мне нужно, зависит от того, какое число 'n' в 2 ^ n.

Итак, если число равно 3, мне нужно, чтобы результат был:* Теперь, очевидно, я могу сделать это вручную с помощью операции String.format ("% 03d", NumberInBinary), но это жестко запрограммировано для 3 цифр.Мне нужно сделать эквивалентный код с неизвестным количеством цифр, как я могу это сделать?(как в String.format ("% 0nd", ваш номер), где n - это количество цифр.)

Ответы [ 3 ]

5 голосов
/ 05 марта 2011

, если n = 4, NumberInBinary = 101;

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

с выводом

0101
1 голос
/ 05 марта 2011

Почему бы не использовать уже встроенный 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();
}
0 голосов
/ 05 марта 2011

Вы можете использовать рекурсию:

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

...