Sujeira em retorno de telnet com o framwork commons.net

Beleza?

Estou usando a api commons.net da apache para me conectar via tenlet porém o retorno vem com muita sujeira.
Conesgui limpar boa parte das sujeiras que vem porém, ainda restaram alguns caracteres que não consigo identificar.

conexão telnet e execução de comando:

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.SocketException;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.telnet.InvalidTelnetOptionException;
import org.apache.commons.net.telnet.TelnetClient;
import org.apache.commons.net.telnet.TerminalTypeOptionHandler;

public class TesteTelnet{
	
	private TelnetClient telnet = new TelnetClient();
	private InputStream in;
	private PrintStream out;
	private char prompt = '$';

	public TesteTelnet( String server, String user, String password ) throws SocketException, IOException, InvalidTelnetOptionException {
		// Connect to the specified server
		TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler("VT100", false, false, true, false);
		telnet.addOptionHandler(ttopt);
		telnet.connect( server, 23 );
		
	 
		// Get input and output stream references
		in = telnet.getInputStream();
		out = new PrintStream( telnet.getOutputStream() );

		// Log the user on
		readUntil( "login: " );
		write( user );
		readUntil( "Password: " );
		write( password );

		// Advance to a prompt
		readUntil( prompt + " " );
  }

/*  public void su( String password ) {
    try {
      write( "su" );
      readUntil( "Password: " );
      write( password );
      prompt = '#';
      readUntil( prompt + " " );
    }
    catch( Exception e ) {
      e.printStackTrace();
    }
  }*/

	public String readUntil( String pattern ) {
	  
/*	  StringBuilder retorno = new StringBuilder();  
	    
	  try{          
		  int ii = 0;  
	    
		  byte[] tmp = new byte[1024];  
	    
		  while (in.read() > 0) {  
		      int i = in.read(tmp, 0, 1024);  
		      if (i < 0)break;  
		      ii = i;  
		      retorno.append(new String(tmp, 0, i));
		  }  
	  
	  }catch(IOException e){  
	      e.printStackTrace();  
	  }  
	  System.out.println(retorno);  
	  return retorno.toString();*/
	  
	/*  BufferedInputStream bufferedInputStream = new BufferedInputStream(in);
	  byte[] bytes = new byte[1024];
	  
	  try {
		bufferedInputStream.read(bytes);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	final String retorno = new String(bytes);
	System.out.println(retorno);
	
	return retorno;*/
	  
		try {
			char lastChar = pattern.charAt( pattern.length() - 1 );
			StringBuffer sb = new StringBuffer();
			boolean found = false;
			char ch = ( char )in.read();
			while( true ) {
				//System.out.print( ch );
				sb.append( ch );
				if( ch == lastChar ) {
					if( sb.toString().endsWith( pattern ) ) {
						return sb.toString();
					}
				}
				ch = ( char )in.read();
			}
		}
		catch( Exception e ) {
			e.printStackTrace();
		}
		return null;

	}

	public void write( String value ) {
		try {
			out.println( value );
			out.flush();
			System.out.println( value );
		}
		catch( Exception e ) {
			e.printStackTrace();
		}
	}

	public String sendCommand( String command ) {
		try {
			write( command );
			return readUntil( prompt + " " );
		}
		catch( Exception e ) {
			e.printStackTrace();
		}
		return null;
	}

	public void disconnect() {
		try {
			telnet.disconnect();
		}
		catch( Exception e ) {
			e.printStackTrace();
		}
	}

	public static void main( String[] args ) {
		try {
			TesteTelnet telnet = new TesteTelnet( "localhost", 
                         "loginservidor", 
                         "senhaservidor" );
			String comando = telnet.sendCommand( "ls" );
			String[] linhas = null;
			if(StringUtils.contains(comando, "\r")){
				linhas = comando.split("\r");
			}
			if(StringUtils.contains(comando, "\n")){
				linhas = comando.split("\n");
			}
			if(StringUtils.contains(comando, "\r\n")){
				linhas = comando.split("\r\n");
			}
			int i = 0;
			for(String linha: linhas){
				
				linha = StringUtils.replace(linha, "[0m", "");
				linha = StringUtils.replace(linha, "[01;34m", "");
				linha = StringUtils.replace(linha, "[00m", "");
				linha = StringUtils.replace(linha, "[m[", "");
				linha = StringUtils.replace(linha, "[01;32m", "");
				linha = StringUtils.replace(linha, "01;36m", "");
				linha = StringUtils.replace(linha, "[01;31m", "");
				
				
				
				System.out.println("Linha 1 = "+i+" "+linha);
				i++;
			}
			/*telnet.su( "root-password" );*/
			telnet.sendCommand( "cd Desktop" );
	 		telnet.sendCommand( "ls" );
			telnet.disconnect();
		}
		catch( Exception e ) {
			e.printStackTrace();
		}
	}
}

Resultado

Linha 1 = 93 eTemplatese
Linha 1 = 94 etestee
Linha 1 = 95 eteste2.sqle
Linha 1 = 96 etesteShel.she
Linha 1 = 97 etesteupdatee
Linha 1 = 98 etexte.txte
Linha 1 = 99 etime_sheete
Linha 1 = 100 etunele
Linha 1 = 101 eurloraclee
Linha 1 = 102 eusuario_e_senha_da_redee
Linha 1 = 103 eusuarioesenhadoterrae
Linha 1 = 104 evare
Linha 1 = 105 eVideose

O lixo que sobrou forão os quadrados que não sei como capturar em java

Boa tarde.

Consegui resolver o problema,
Na verdade adicionai no código uma linha que substitui o quadrado por espaço em branco.

Agora estou com outro problema, nem sei se preciso abrir outro post mas vamos lá

Agora quando faço telnet em um servidor windows usando esse código a máquina fica com processamento a 100% e dá pau de heapspace
Não tenho idéia de qual é o problema, porém disconfio que tem haver com o tipo de prompt que uso, pois no linux, tentei logar com um pronpt diferente de $ e deu o mesmo erro.
No windows disconfio que o prompt seja > mas mesmo usando > ao imvés de $ dá pau.

Aguardo resposta e obrigado pela oportunidade.