如何覆盖(而不是OOP覆盖)System.out.print()的输出?

时间:2010-02-09 05:58:25

标签: java

有没有办法可以覆盖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

现在我想编写一个方法来覆盖特定位置的输出。就像是, 覆盖(7,“X Y Z”); 应该输出我, A B C X Y Z G H I J K L

这些应该在控制台中发生。

请帮忙。 感谢

5 个答案:

答案 0 :(得分:10)

  1. 创建您自己的PrintStream - 例如public class YourPrintStream extends PrinterStream
  2. 覆盖print(String s)方法,并以您喜欢的方式更改字符串。然后致电super.print(s));
  3. 致电System.setOut(new YourPrintStream())
  4. 然后每次调用System.out.println时,传入的字符串将在您进入实际流之前由您控制。

答案 1 :(得分:2)

System.out是输出流。一旦你把东西放进去,你就不能进去并改变它。即使你可以,它只是一个字节表示。您最接近的是在将数据发送到标准输出之前进行修改,或者包​​装控制台以便在另一侧捕获数据。

答案 2 :(得分:1)

如果您只需修改当前正在编写的同一行,则可以编写字符“\ _ r”,将光标重新定位在行的开头而不会前进到下一行。从那里,您可以重写整行。例如:

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

可能会显示(至少在UNIX-ish系统上)

A B C X Y F G

如果您需要跨平台或编辑较旧的行,您可能会开始进入类似Curses的库。我不能在那里建议任何特定的Java,但你可以看看......

答案 3 :(得分:0)

您可以使用System.setOut()方法。

答案 4 :(得分:0)

我建议你使用拦截器,如果使用ejbs或使用aop方面。

在实际将字符串放入其中之前,可以拦截对System.out的每次调用。

相关问题