【问题标题】:StringBuilder with some text in red overriding toString in JavaStringBuilder 带有一些红色文本覆盖 Java 中的 toString
【发布时间】:2019-04-03 05:47:13
【问题描述】:

我被要求使用 StringBuilder 覆盖 MyClass 的 toString 方法,我必须添加一些红色文本,这样它看起来像这样:

姓名:汤姆

姓:贝克

年龄: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)

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

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

【问题讨论】:

  • StringBuilderString 本身没有颜色。颜色必须来自其他地方,例如HTML。您可以添加另一个标签以明确您的问题吗?
  • 一般没有“红字”之类的东西。文本只是在屏幕上编码的字节组合,用于表示一系列字符。您需要具体说明您使用的是富文本格式还是其他格式,否则我们将无法在此处为您提供帮助。
  • 你能指定它是什么类型的程序吗?它是一个使用 Swing 或 JavaFX 的 Web 应用程序或桌面
  • 扩展@TimBiegeleisen 的评论,如何为文本着色(以及这是否可能)完全取决于输出机制。如果要在终端上打印,ANSI 转义码是要走的路。如果要在浏览器中呈现,请使用 html(并确保没有转义)。如果是 JavaFX 的 Swing,也可以使用 html,具体取决于文本传递给 UI 的方式。

标签: java eclipse


【解决方案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");
...

【讨论】:

  • 非常感谢
【解决方案2】:

如果输出到彩色终端仿真器,那么您可以插入相关的控制代码。有确定终端类型的机制,例如环境变量 ($TERM) 和 telnet 使用协商系统 (WILL/WONT/DO/DONT, IIRC),但出于您的目的,您可能可以做个假设吧。

通常,基线是带有“ANSI 颜色”的 vt100 终端仿真。谷歌代码。我得到http://wiki.bash-hackers.org/scripting/terminalcodes

【讨论】:

    【解决方案3】:

    您可以在提供的 cmets 中找到您需要的所有信息。

    如果你想要一个简单的总结,请看这里:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多