Я создаю простой эмулятор терминала, используя библиотеку pty4j . В моей программе есть метод print()
, который отображает текст на холсте с помощью метода GraphicsContext.fillText()
из javafx. Я подключаю эмулятор к экземпляру cmd и читаю исходящий вывод из буферизированного ридера. Теперь, к сожалению, когда он получает текст, он также включает ANSI-escape-символы (см. Изображение). Однако, если я распечатываю вывод в IDE или системную консоль, он работает нормально.
Я попытался использовать метод readLine()
из BufferedReader, а затем применяя регулярное выражение, но поскольку не все входные данные, полученные от терминала, завершаются символом \n
, который он блокирует в последней строке.
Thread terminalReaderThread = new Thread() {
public void run() {
try {
int c;
while (terminal.isRunning() && (c = terminal.getReader().read()) != -1) {
if(c != 0){
print(Character.toString((char)c));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
terminalReaderThread.start();
Существует ли эффективный способ отфильтровать эти escape-коды из inputStream?