Java中带有红色重写toString的一些文本的StringBuilder

时间:2018-10-30 08:18:38

标签: java eclipse

我被要求使用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)

  • 输出将通过控制台可视化。

  • 老师问这个,但我觉得不可能。

3 个答案:

答案 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();
    }
}