Как центрировать текст заявления печати?

Итак, я работал над моим проектом java и в одной части программы печатаю текст Текст отображается с левой стороны Однако я хотел, чтобы он отображался в середине Сколько я это делаю? Это вопрос новичков?

Пример:

public static void main(String[] args)
{
System.out.println("Hello");
}

Ответ 1

ОЧЕНЬ БЫСТРЫЙ ответ

Вы можете использовать библиотеку JavaCurses, чтобы делать забавные вещи на консоли. Читайте ниже там.

Прежде чем вы это сделаете, позвольте ответить на весь ваш вопрос в каком-то контексте

Это вопрос новичков:), но это правильный вопрос. Итак, некоторые подсказки для вас:

Первый вопрос: насколько обширен терминал? (он подсчитывается по количеству символов) старые терминалы имели фиксированные размеры 80 символов и 25 строк;

Итак, в качестве первого шага начинаем с предположения, что он имеет ширину 80 символов.

Как бы вы центрировали строку на экране терминала шириной 80 символов?

Вам нужно беспокоиться о длине строки? Как вы позиционируете что-то горизонтально? Вы добавляете пробелы? Есть ли строка формата, с которой вы можете столкнуться?

Как только вы написали программу, чтобы вы могли дать ей любую строку, которая будет корректно отображаться в этих предположениях (этот терминал имеет ширину 80 символов), теперь вы можете начать беспокоиться о том, что произойдет, если вы подключены к терминалу, который более или менее 80 символов? Или вы даже подключены к терминалу. Например, если у вас нет, то имеет смысл "превзойти" ваш код? вероятно, нет.

Итак, вопрос в том, как вы получаете всю эту информацию?

То, о чем вы просите, - это возможность рассматривать консоль как интеллектуальный терминал teltype (tty) с возможностями управления на основе символов. Телетерминалы старого могут делать массу забавных вещей.

Некоторая история

Терминалы Teletype были сложными вещами и исходили из наследия, что было много производителей терминалов (IBM, DEC и т.д.)... Эти терминалы телетайпа были разработаны для решения множества проблем, таких как возможность отображения контента удаленно с мейнфреймов и миникомпьютеров.

Существовали кучу терминальных стандартов vt100, vt200, vt220, ansi, которые возникали в разных точках истории развития терминала и сотен проприетарных на этом пути.

Эти терминалы могут делать позиционирование курсоров, окон и цветов, выделять текст, подчеркивать и т.д., но не все могут делать все. Однако это было сделано с использованием "контрольных" символов. ctrl-l - это четкий экран на терминалах ansi и vt, но это может быть передача страницы на что-то другое.

Если вы написали программу, специфичную для нее, это не имело бы смысла в другом месте. Поэтому необходимость сделать это просто вызвала пару библиотек абстракции, которые скрывали бы отвратительность.

Первая из них называется библиотекой termcap (terminal-capability), около 1978 года, которая предоставила общий способ работы с терминалами в системах UNIX. Он мог бы указать запущенную программу доступных возможностей терминала (например, возможность изменять цвет текста) или позиционировать курсор в месте или очистить себя и т.д., И тогда программа изменит свое поведение.

Вторая библиотека называется curses, около 1985 (??) она была разработана как часть системы BSD и использовалась для написания игр... Одной из самых популярных версий этой библиотеки является библиотека GNU curses (ранее известный как ncurses).

В VMS я считаю, что библиотека называется SMG $(библиотека управления экраном).

Вкл. с ответом

Любые способы, поэтому вы можете использовать одну из этих библиотек в java, чтобы определить, работаете ли вы на правильном терминале. В исходной кузнице есть библиотека под названием JavaCurses, которая предоставляет эту возможность java-программам. Это будет упражнение в обучении использованию новой библиотеки в ваших программах и должно быть захватывающим.

JavaCurses предоставляет возможности терминального программирования как в среде Unix, так и в Windows. Это будет забавное упражнение для вас, чтобы увидеть, можете ли вы использовать его для игры.

расширенное упражнение

Другим упражнением будет использование этой же библиотеки, чтобы увидеть, можно ли создать программу, которая хорошо отображается на терминале, а также записывать в текстовый файл без кодов терминалов;

Если у вас есть какие-либо проблемы, отправьте сообщение, я помогу, когда вы пойдете вперед.

Ответ 2

Вы можете сделать что-то вроде:

public static void main(String[] args)
{
    String h = "Hello";
    System.out.println(String.format("%-20s", h);
}

Просто введите номер между % и s, пока не получите желаемый результат, этот подход добавляет пробелы в строку.

Ответ 3

Если у вас определенная длина строки, apache commons StringUtils.center легко выполнит задание. Однако, если вы хотите добавить эту библиотеку. javadoc

Ответ 4

Операторы печати Java в консоли не могут быть центрированы, так как максимальная ширина для строки отсутствует.

Если ваша консоль ограничена, например, 80 символами, вы можете написать специальный регистратор, который будет заполнять строку пробелами.

Если ваша строка была больше 80 символов, вам придется вырезать строку и распечатать остаток на следующей строке. Кроме того, если кто-то использовал ваше приложение с консолью с другой шириной (особенно меньшей), если бы выглядел странно.

Итак, в принципе, нет, нет простого способа сосредоточиться на выходе...

Ответ 5

Если вы знаете размер и не хотите использовать внешнюю библиотеку, вы можете сделать что-то вроде этого:

static void printer(String str, int size) {
    int left = (size - str.length()) / 2;
    int right = size - left - str.length();
    String repeatedChar = "-";
    StringBuffer buff = new StringBuffer();
    for (int i = 0; i < left; i++) {
        buff.append(repeatedChar);
    }
    buff.append(str);
    for (int i = 0; i < right; i++) {
        buff.append(repeatedChar);
    }
    // to see the end (and debug) if using spaces as repeatedChar
    //buff.append("$");  
    System.out.println(buff.toString());
}

// testing:

printer("string", 30);

// output:
// ------------string------------

Если вы вызываете его с нечетным числом для переменной size, то это будет с одним - справа. И вы можете изменить repeatedChar как пространство.

Изменить

Если вы хотите напечатать только один char, и вы знаете размер, вы можете сделать это с помощью System.out.printf по умолчанию:

int size = 10;
int left = size/2;
int right = size - left;
String format = "%" + left + "c%-" + right + "c";
// would produce: "%5c%-5c"
System.out.printf(format,' ', '#');
// output: "     #    " (without the quotes)

%-5c выровняйте символ # слева от пяти назначенных ему пространств

Ответ 6

Вы не можете. Вы пишете консоль, которая не имеет ширины, поэтому центр undefined.