有没有办法可以覆盖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
这些应该在控制台中发生。
请帮忙。 感谢
答案 0 :(得分:10)
PrintStream
- 例如public class YourPrintStream extends PrinterStream
。print(String s)
方法,并以您喜欢的方式更改字符串。然后致电super.print(s))
; System.setOut(new YourPrintStream())
然后每次调用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的每次调用。