我被要求使用StringBuilder覆盖MyClass的toString方法,并且我必须以红色附加一些文本,以便其看起来像这样:
名称:Tom
姓:贝克
年龄: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)
输出将通过控制台可视化。
老师问这个,但我觉得不可能。
答案 0 :(得分:1)
由于打印在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");
...
答案 1 :(得分:0)
如果输出将发送到彩色终端仿真器,则可以插入相关的控制代码。有确定终端类型的机制,例如环境变量($TERM
)和telnet使用协商系统(WILL
/ WONT
/ DO
/ DONT
, IIRC),但出于您的目的,您可能只需要进行假设即可。
通常,基线是带有“ ANSI颜色”的vt100终端仿真。谷歌的代码。我得到http://wiki.bash-hackers.org/scripting/terminalcodes。
答案 2 :(得分:0)
您可以在收到的评论中找到所需的所有信息。
如果需要简单的包装,请看这里:
在ANSI终端(例如Linux)上,您可以通过插入ANSI Escape sequences
System.out.println("Hello \033[31mWorld\033[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();
}
}