StringBuilder用一些红色文本覆盖Java中的toString



有人要求我使用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[31mWorld33[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();
}
}

最新更新