Как записать цифры ASCII графикой на Java?

211
04 июня 2017, 18:33

Как можно вывести строку из задаваемых пользователем произвольного набора цифр большим, символьным шрифтом? Должна быть возможность легко заменять шрифт.

Пример шрифта

  ___    __   ___    ____    _  _     _____     __    ______    ___     ___   
 / _ \  /_ | |__ \  |___ \  | || |   | ____|   / /   |____  |  / _ \   / _ \  
| | | |  | |    ) |   __) | | || |_  | |__    / /_       / /  | (_) | | (_) | 
| | | |  | |   / /   |__ <  |__   _| |___ \  | '_ \     / /    > _ <   \__, | 
| |_| |  | |  / /_   ___) |    | |    ___) | | (_) |   / /    | (_) |    / /  
 \___/   |_| |____| |____/     |_|   |____/   \___/   /_/      \___/    /_/   
Answer 1

Например, так:

static class Digit {
    String[] lines;
    public Digit(String... lines) {
        this.lines = lines;
    }
    /**
     * функция для удобного создания массива Digit[] из описания шрифта
     *
     * @param lines описание шрифта в виде строк с большими цифрами 0-9, цифры разделены пробелом
     * @return массив длины 10
     */
    public static Digit[] createDigits(String... lines) {
        int height = lines.length;
        int width = (lines[0].length() - 9 /* десять цифр => девять пробелов */) / 10;
        return IntStream
                .range(0, 10)  // Stream из цифр 0-9
                .mapToObj(digit ->
                        new Digit(Stream
                                .of(lines)
                                // цифры в line идут следующим образом: 
                                // `width` символов цифры `0`, пробел, 
                                // `width` символов цифры `1`, пробел, 
                                // ...
                                .map(line -> line.substring(digit * (width + 1), (digit + 1) * (width + 1) - 1))
                                .toArray(String[]::new))
                ).toArray(Digit[]::new);
    }
}
public static void main(String[] args) {
    Digit[] digits = Digit.createDigits(
            "  ###      #     #####   #####  #       #######  #####  #######  #####   ##### ",
            " #   #    ##    #     # #     # #    #  #       #     # #    #  #     # #     #",
            "#     #  # #          #       # #    #  #       #           #   #     # #     #",
            "#     #    #     #####   #####  #    #  ######  ######     #     #####   ######",
            "#     #    #    #             # #######       # #     #   #     #     #       #",
            " #   #     #    #       #     #      #  #     # #     #   #     #     # #     #",
            "  ###    #####  #######  #####       #   #####   #####    #      #####   ##### "
    );
    int height = digits[0].lines.length;
    // число 5781, для удобства уже разбитое на цифры
    int[] number = {5, 7, 8, 1};
    for (int i = 0; i < height; i++) {
        for (int digit : number) {
            System.out.print(digits[digit].lines[i] + " ");
        }
        System.out.println();
    }
}

Демонстрация работы на ideone.

READ ALSO
Использование button

Использование button

Что лучше использовать для создания кнопки с дальнейшим редиректом? Упираться в семантику и использовать button или в быстродействие и расширенные...

303
Что за элемент отображается в дебагере мозилы? Как его можно убрать?

Что за элемент отображается в дебагере мозилы? Как его можно убрать?

Здравствуйте, есть менюшка, которая выводится циклом с CMS, тоисть все элементы по идее должны быть одинаковы, но в дебагере присутсвуют пробелы...

354
TABLE выходит за правую границу DIV

TABLE выходит за правую границу DIV

как поместит содержимое TABLE в DIV не выходя из границы DIV сейчас выглядеть так:

275
Ошибка при загрузке js, Uncaught Error: Bootstrap&#39;s JavaScript requires jQuery

Ошибка при загрузке js, Uncaught Error: Bootstrap's JavaScript requires jQuery

Доброго времени сутокПытаюсь воспользоваться скриптом из js файла, но выдается ошибка

462