2015-10-12 1 views
0

Я создал сеанс оболочки, используя Java. Используя K, я вводю команды и используя 'в', 'channel' Я получаю вывод оболочки. Я сталкиваюсь с проблемами при получении вывода оболочки. Как показано ниже, вывод содержит значение ascii нескольких специальных символов. Пожалуйста, дайте мне знать, как отформатировать полученную строку.Как форматировать выходной поток оболочки Java, удаляя незаконные символы

Я дал выход образца.

Выходные Получено:

1,68 (Б [м [39; 49m [K Задачи: (B [м [39; 49m (B [м 274 (В [м [39; 49mtotal, (B [м [39; 49m (B [м 1 (B [м [39; 49mrunning ..

код Я использую здесь идет:

public static void printOutput(InputStream in,Channel channel) { 
String output= ""; 
try { 

    byte[] tmp=new byte[1024]; 
    while(in.available()>0){ 
     int i=in.read(tmp, 0, 1024); 
     if(i<0){break;} 
     output += new String(tmp, 0, i); 
    } 
    System.out.println("Inside print output"); 
    System.out.println(output); 
} catch (Exception e) { 
    System.out.println(e+"\n"); 
    e.printStackTrace(); 
} 

OutputStream os = channel.getOutputStream(); 
in = channel.getInputStream(); 
channel.connect(); 
os.write((command +"\n").getBytes()); 
os.flush(); 
printOutput(in,channel); 
+0

пожалуйста, добавьте ваши выходы снимок –

+0

Посмотрите на https: // ан .wikipedia.org/wiki/ANSI_escape_code, чтобы узнать, как создаются escape-последовательности ANSI; то вы узнаете, как их удалить. –

ответ

0

заменить все специальные символы в пустой строка

output.replaceAll("[^\\w]", ""); 

приведен ниже. , если это не ваш, за исключением, вы можете обновить регулярное выражение, выбрать символы, которые Вы захотите заменить на пустую stirng, например: [([;,.: ]

168Bm3949mKTasksBm3949mBm274Bm3949mtotalBm3949mBm1Bm3949mrunning 
+0

Благодарим вас за ответ. Я нашел альтернативное решение для него. Общий. Написание этого кода после создания канала (ChannelShell)) .setPtyType ("dumb"); решает проблему вывода оболочки. –

Смежные вопросы