1

在java中制作服务器,首先,这是代码。

    AnsiConsole.out.println("This is a Test.");
    AnsiConsole.out.println("\e[0;31m Red");
    AnsiConsole.out.println("\e[0;34m Blue");
    AnsiConsole.out.println("\e[0;32m Green");
    AnsiConsole.out.println("\e[1;33m Yellow");

所以,我的问题是它读取转义字符是非法的。任何意见?

使用 Jansi 库http://jansi.fusesource.org/index.html

4

4 回答 4

2

您需要转义反斜杠:

AnsiConsole.out.println("This is a Test.");
AnsiConsole.out.println("\\e[0;31m Red");
AnsiConsole.out.println("\\e[0;34m Blue");
AnsiConsole.out.println("\\e[0;32m Green");
AnsiConsole.out.println("\\e[1;33m Yellow");

因为在 Java 中,反斜杠在字符串\中具有特殊的含义:它用于特殊字符,例如\n(new line) 或\t (tab)。

这里有一个很好的主题描述。

于 2012-08-07T11:15:10.050 回答
1

这是因为\e不是有效的转义序列。如果您确实想打印反斜杠,则需要对其进行转义:"\\e[0;31m Red"

您可以查看此页面以获取有效转义序列的列表。

于 2012-08-07T11:15:45.290 回答
1

我假设您正在尝试在这里生成ANSI 转义序列

\e不是 Java 中的有效字符,您需要的是\u001bANSI 序列的开头。

AnsiConsole.out.println("\u001b[0;31m Red");
于 2012-08-07T11:22:27.413 回答
0

如果你想在打印的字符串中包含一个 '\' (反斜杠),你应该用另一个 '\' =>AnsiConsole.out.println("\\e[0;31m Red");

目前java理解你试图逃避不是特殊字符的'e'并且它抱怨这一点。

于 2012-08-07T11:16:30.413 回答