java - 如何从 Java 字符串中删除 ANSI 控制字符 (VT100)

标签 java ansi jsch vt100

我正在使用自动化并使用 Jsch 连接到远程盒子并自动执行一些任务。

我在解析命令结果时遇到问题,因为有时它们会附带 ANSI Control chars .

我已经看到了 this answerthis other one但它不提供任何图书馆来做到这一点。我不想重新发明轮子,如果有的话。我对这些答案没有信心。

现在,我正在尝试这个,但我不确定它是否足够完整。

reply = reply.replaceAll("\\[..;..[m]|\\[.{0,2}[m]|\\(Page \\d+\\)|\u001B\\[[K]|\u001B|\u000F", "");

如何从 Java 字符串中删除 ANSI 控制字符 (VT100)?

最佳答案

大多数 ANSI VT100 序列的格式为 ESC [,可选择后跟一个数字或由 ; 分隔的两个数字,后跟一些不是数字或 ; 的字符。所以像

reply = reply.replaceAll("\u001B\\[[\\d;]*[^\\d;]","");

reply = reply.replaceAll("\\e\\[[\\d;]*[^\\d;]","");  // \e matches escape character

我想应该能捕获其中的大部分。可能还有其他情况您可以单独添加。 (我没有测试过这个。)

您发布的正则表达式中的一些备选方案以 \\[ 开头,而不是转义字符,这可能意味着您可能会删除一些您不应该删除的文本,或者删除部分控制序列但保留 ESC 字符。

关于java - 如何从 Java 字符串中删除 ANSI 控制字符 (VT100),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189651/

相关文章:

java - Jetty:找出哪个连接器用于传入请求

java - 为什么 java 应用程序在 gdb 中崩溃但在现实生活中运行正常?

delphi - Delphi:使Unicode RAR-Component 2.0

C编程,scanf()函数

java - JSCH:SFTP。使用端口 21 在 session.connect() 挂起

java - 连接到 WELD-SE 类路径扫描器

java - 机器人类,鼠标做圆周运动

c - ANSI C -> Arrays -> Variablely modified at file scope

java - 使用 Jsch 将 java textarea 作为输入流以交互模式运行 shell 命令

java - 从 JAVA API 获取 Amazon EC2 实例的公共(public) DNS