有人要求我使用StringBuilder覆盖MyClass的方法toString,我必须用红色附加一些文本,这样它就会看起来像:
名称:Tom
姓氏:Baker
年龄:17->红色文本
代码:
@Override
public String toString(){
StringBuilder sb = new StringBuilder;
sb.append("Name:"+this.name+"n");
sb.append("Surname:"+this.surname+"n");
sb.append("Age:"+this.age+"n");
return sb.toString();
}
编辑
谢谢你的回答。
该程序是为大学作业编写的,使用Eclipse进行编码。
它是基本的Java(而不是RXJava(
输出将通过控制台进行可视化。
老师问,但我觉得不可能。
由于打印在System.err
上的文本通常以红色报告,您可以尝试以下操作:
public class MyClass
{
.....
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("Name: " + name);
sb.append(System.lineSeparator());
sb.append("Surname: " + surname);
return (sb.toString());
}
public void printAge(PrintStream stream)
{
stream.println("Age: " + age);
}
} // class MyClass
...
MyClass my_instance;
my_instance = new MyClass();
...
System.out.println(my_instance);
System.out.flush() // make sure everything's printed before doing something on stderr
my_instance.printAge(System.err);
System.err.flush() // make sure everything's printed before doing something on stdout again
System.out.println("Anything else to print");
...
如果输出要进入彩色终端模拟器,则可以插入相关的控制代码。有一些机制可以确定终端类型,例如环境变量($TERM
(和telnet使用协商系统(WILL
/WONT
/DO
/DONT
,IIRC(,但出于您的目的,您可能只需要做出假设。
通常,基线是带有"ANSI颜色"的vt100终端模拟。用谷歌搜索代码。我明白http://wiki.bash-hackers.org/scripting/terminalcodes.
您可以在给出的评论中找到所需的所有信息。
如果你想要一个简单的总结,请看这里:
在ANSI终端(例如Linux(上,可以通过插入ANSI Escape序列来实现这一点
System.out.println("Hello 33[31mWorld 33[0m!");
但这在Windows控制台上不起作用。
在Windows控制台上,您必须使用第三方库,如JAnsi
import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;
public class Main {
public static void main(final String[] args) {
AnsiConsole.systemInstall();
System.out.println(Ansi.ansi().render("Hello @|red World|@!"));
AnsiConsole.systemUninstall();
}
}