Как переопределить (не переопределить ООП) вывод System.out.print ()? - PullRequest
7 голосов
/ 09 февраля 2010

Есть ли способ переопределить вывод System.out.print()?

Вот что я пытаюсь сделать:

System.out.print("A B C D E F G H I J K L");

Напечатает: A B C D E F G H I J K L

Теперь я хочу написать метод, который переопределяет этот вывод из определенной позиции. Что-то вроде

override(7, "X Y Z");

Должен вывести

A B C X Y Z G H I J K L 

Это должно произойти прямо в консоли.

Ответы [ 5 ]

10 голосов
/ 09 февраля 2010
  1. создать свой собственный PrintStream - например, public class YourPrintStream extends PrinterStream.
  2. переопределите метод print(String s) и измените строку там, как вам нравится. Затем позвоните super.print(s));
  3. Звоните System.setOut(new YourPrintStream())

Тогда каждый раз, когда вызывается * 1016, переданная в текущий поток строка будет находиться под вашим контролем.

2 голосов
/ 09 февраля 2010

System.out - выходной поток. После того, как вы что-то вставили, вы не можете зайти и изменить это. Даже если бы вы могли, это просто байтовое представление в этот момент. Самое близкое, что вам нужно сделать, - это внести изменения перед отправкой данных в стандартный формат или обернуть консоль так, чтобы вы захватили данные на другой стороне.

1 голос
/ 09 февраля 2010

Если вам когда-либо нужно изменить только ту строку, которую вы сейчас пишете, вы можете написать символ "\ r", который перемещает курсор в начало строки, не переходя на следующую строку. Оттуда вы можете переписать всю строку. Например:

A B C D E F G\rA B C X Y

, вероятно, будет отображаться (по крайней мере в системе UNIX)

A B C X Y F G

Если вам требуется межплатформенность или редактирование старых строк, вы, вероятно, начинаете проникать на территорию Curses -подобной библиотеки. Я не могу предложить какие-либо конкретные для Java там, но вы можете осмотреться ...

0 голосов
/ 02 сентября 2011

Я предлагаю вам использовать перехватчик, если вы используете ejbs или aop аспект.

Каждый вызов System.out может быть перехвачен перед тем, как фактически вставить в него строку.

0 голосов
/ 09 февраля 2010

Вы можете использовать метод System.setOut () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...