System.err.print(ln) 与 system.out.println 在同一行? JAVA
System.err.print(ln) on the same line as a system.out.println? JAVA
我有一个必须为 uni 项目制作的 CLI 游戏,并且(我知道它的错误做法)希望生命以红色打印。我正计划使用 System.err.print 以红色打印红心,但它们不会加入我的 System.out.print("") 输出。
这是可能的还是我可以提供某种覆盖功能?
使用代码时;
System.out.print("Player Lives: ");
System.out.print("♥ ♥ ♥ ♥ ♥")
我的输出将与预期的一样在同一行。但是,当我将代码更改为:System.out.print("Player Lives: ");
System.err.print("♥ ♥ ♥ ♥ ♥")
输出将分成两行...
Netbeans IDE v12.0...
任何帮助或想法将不胜感激!
谢谢!
对此的简单回答是:只是不要这样做!
当您将输出发送到 System.out 和 System.err 时,您无法控制输出在“控制台”上显示时如何交错。交错将取决于 Java 程序 .
无法控制的许多因素
您可以利用 IDE 的“功能”,即在其控制台 window 上以红色显示 System.err
输出,但您会发现它在其他上下文中不起作用1。例如,来自典型的命令 shell.
通常可以让控制台输出不同颜色的文本。然而,这依赖于控制台支持(通常)ANSI Escape Codes。这些不一定在最终用户的控制台/终端/终端仿真器上启用。如果未启用,用户会在屏幕上看到一堆奇怪的东西。
有很多方法可以解决这个问题(例如使用 Java 终端库),但总会有一些粗糙的边缘。例如,如果您的讲师/助教 运行 使用您的应用程序,捕获输出并尝试使用(比如)less
查看它,他们可能会看到奇怪的东西而不是颜色。
我的建议:除非输出彩色文本(以及像“♥”这样的标志性字符)是特定的分配要求,否则不要这样做。如果你在讲师/助教用来 运行 和标记你的代码的上下文中做错了,你会让你的作业变得更加困难,并且让自己失去分数。
(您可能会争辩说这是一件值得学习的事情。我的反驳是,它的用处远没有您想象的那么大。现在大多数应用程序都使用 GUI 框架或 Web 浏览器来实现它们的功能用户界面。基于控制台的界面通常被视为过时的。)
1 - 我注意到您的评论,您的讲师希望获得整个 NetBeans 项目,并且 运行 代码将 IDE.
如果红心不代表错误,请不要在错误流中打印它们。
你想要红心,这很容易做到。您需要了解一些有关控制台的知识(不要太多)以及在控制台上进行彩色打印的含义。
控制台是取代物理设备的程序。在过去,控制台就像连接到通信频道的电视屏幕。这个电视屏幕也有一个键盘。控制台负责向“计算机”发送信息并从计算机接收数据(控制台控制代码)并呈现该信息。
大部分发送和接收的数据都是文本。今天,我们用程序模拟控制台,“tty 设备”是通信通道的模拟(今天是设备文件,而不是调制解调器或串行线)。当您键入时,数据将写入连接到您的控制台的“tty”,当计算机显示文本时,控制台读取 tty 并显示它读取的内容。
这对颜色很重要的原因是因为您需要在输出中打印控制台控制代码。第一个控制台控制代码是将控制台转换为显示红色文本,第二个是将控制台转换为显示“正常”文本。通过更多的研究,您可以(轻松地)显示 16 种不同的颜色,结合 16 种不同的背景颜色、闪烁的文本等。一些控制台支持更多的操作“模式”,您可以尝试自己的。有一组标准模式,几乎所有控制台都广泛支持,称为 ANSI 模式。
控制台的默认信息是文本,然后显示为文本。要让控制台接受命令,它不会是纯文本。
public static final String RED = "\u001B[31m";
public static final String RESET = "\u001B[0m";
第一个字符串会将控制台转换为红色文本,第二个字符串会将颜色模式重置为默认值。
所以要打印一个红色的“你好”,你可以这样做:
System.out.println(RED + "hello" + RESET);
你可以制作一个函数来打印红色的东西
public void printRed(String message) {
System.out.println(RED + message + RESET);
}
或构建“包裹”红色字符串等的函数
我有一个必须为 uni 项目制作的 CLI 游戏,并且(我知道它的错误做法)希望生命以红色打印。我正计划使用 System.err.print 以红色打印红心,但它们不会加入我的 System.out.print("") 输出。 这是可能的还是我可以提供某种覆盖功能?
使用代码时;
System.out.print("Player Lives: ");
System.out.print("♥ ♥ ♥ ♥ ♥")
我的输出将与预期的一样在同一行。但是,当我将代码更改为:System.out.print("Player Lives: ");
System.err.print("♥ ♥ ♥ ♥ ♥")
输出将分成两行...
Netbeans IDE v12.0... 任何帮助或想法将不胜感激!
谢谢!
对此的简单回答是:只是不要这样做!
当您将输出发送到 System.out 和 System.err 时,您无法控制输出在“控制台”上显示时如何交错。交错将取决于 Java 程序 .
无法控制的许多因素您可以利用 IDE 的“功能”,即在其控制台 window 上以红色显示
System.err
输出,但您会发现它在其他上下文中不起作用1。例如,来自典型的命令 shell.通常可以让控制台输出不同颜色的文本。然而,这依赖于控制台支持(通常)ANSI Escape Codes。这些不一定在最终用户的控制台/终端/终端仿真器上启用。如果未启用,用户会在屏幕上看到一堆奇怪的东西。
有很多方法可以解决这个问题(例如使用 Java 终端库),但总会有一些粗糙的边缘。例如,如果您的讲师/助教 运行 使用您的应用程序,捕获输出并尝试使用(比如)less
查看它,他们可能会看到奇怪的东西而不是颜色。
我的建议:除非输出彩色文本(以及像“♥”这样的标志性字符)是特定的分配要求,否则不要这样做。如果你在讲师/助教用来 运行 和标记你的代码的上下文中做错了,你会让你的作业变得更加困难,并且让自己失去分数。
(您可能会争辩说这是一件值得学习的事情。我的反驳是,它的用处远没有您想象的那么大。现在大多数应用程序都使用 GUI 框架或 Web 浏览器来实现它们的功能用户界面。基于控制台的界面通常被视为过时的。)
1 - 我注意到您的评论,您的讲师希望获得整个 NetBeans 项目,并且 运行 代码将 IDE.
如果红心不代表错误,请不要在错误流中打印它们。
你想要红心,这很容易做到。您需要了解一些有关控制台的知识(不要太多)以及在控制台上进行彩色打印的含义。
控制台是取代物理设备的程序。在过去,控制台就像连接到通信频道的电视屏幕。这个电视屏幕也有一个键盘。控制台负责向“计算机”发送信息并从计算机接收数据(控制台控制代码)并呈现该信息。
大部分发送和接收的数据都是文本。今天,我们用程序模拟控制台,“tty 设备”是通信通道的模拟(今天是设备文件,而不是调制解调器或串行线)。当您键入时,数据将写入连接到您的控制台的“tty”,当计算机显示文本时,控制台读取 tty 并显示它读取的内容。
这对颜色很重要的原因是因为您需要在输出中打印控制台控制代码。第一个控制台控制代码是将控制台转换为显示红色文本,第二个是将控制台转换为显示“正常”文本。通过更多的研究,您可以(轻松地)显示 16 种不同的颜色,结合 16 种不同的背景颜色、闪烁的文本等。一些控制台支持更多的操作“模式”,您可以尝试自己的。有一组标准模式,几乎所有控制台都广泛支持,称为 ANSI 模式。
控制台的默认信息是文本,然后显示为文本。要让控制台接受命令,它不会是纯文本。
public static final String RED = "\u001B[31m";
public static final String RESET = "\u001B[0m";
第一个字符串会将控制台转换为红色文本,第二个字符串会将颜色模式重置为默认值。
所以要打印一个红色的“你好”,你可以这样做:
System.out.println(RED + "hello" + RESET);
你可以制作一个函数来打印红色的东西
public void printRed(String message) {
System.out.println(RED + message + RESET);
}
或构建“包裹”红色字符串等的函数