文本文件中的Java打印转义字符

时间:2019-06-02 19:00:10

标签: java

我在有效的代码中内联了ANSI转义序列,但是当从文本文件中读取相同的字符串时,我无法使其正常工作。

dOut.writeBytes(“ \ 033 [0; 31; 1m>帮助(?)-获取帮助\ n”);

(dOut = DataOutputStream)

这将打印红色文本或黑色背景。

从文本文件中读取完全相同的行是行不通的,它会将行打印为纯文本。

                BufferedReader menuReader = new BufferedReader(new FileReader("help.txt"));
                while ((menuLine = menuReader.readLine()) != null) {
                    dOut.writeBytes(menuLine + "\n");
                }
                menuReader.close();

文本文件只有一行:\ 033 [0; 31; 1m>帮助(?)-获取帮助

2 个答案:

答案 0 :(得分:0)

编写一个可以识别特定模式的解析器,并将其转换为所需的字符串。

答案 1 :(得分:0)

着色语法通常特定于所使用的外壳,例如一种语法可能在Linux上的Bash Shell中可用,但在Windows上的Cygwin Bash Shell中将失败。此外,某些终端可能无法打印所有颜色组合,例如浅灰色文本的黑色背景有时不起作用。

根据this answer,您必须使用unicode语法。要在白色背景上显示红色文本,请使用以下

N = 4
A=[]
B=[]
for i in range(N):
    B.append(i)
    A.append(B.copy())
    print(A)
# Output:
# [[0]]
# [[0], [0, 1]]
# [[0], [0, 1], [0, 1, 2]]
# [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]

在文件中,您使用的String redFg = "\u001B[31m"; String blackBg = "\u001B[40m"; System.out.println(blackBg + redFg + "> help (?) - Get help"); 是一个八进制值,等于十六进制的\033。您必须将格式语法转换为Java支持的格式。