Estou recebendo dados pela serial e salvando em uma String.
quando pego a string e imprimo com System.out.println ela imprime assim:
DemoConsole
quando dou um append com a mesma string em JTextArea aparece assim ;
[1;34mDemoConsolee[0m
Esta string acima é o nome diretório do linux que estou recebendo pela serial. O system.out.println deixa até em cores diferentes os diretórios
e arquivos.
Gostaria que o append imprima igual ao System.out.println.
Amigo, cole a parte do codigo onde o sistema deve fazer a impressao da leitura do serial, é dificil de adivinhar se há algo errado no seu codigo, sem visualizar o seu codigo.
E não adianta eu ficar dando palpite se voce pode estar fazendo este procedimento de outra maneira…
O tratamento dos caracteres de controle é uma propriedade da console do sistema operacional (e talvez a da IDE), não é a String em si que é “colorida”.
Então não se pode esperar que ao escrever a String em qualquer lugar (um componente gráfico, uma página web, um arquivo, etc) ela vá sair com as cores determinadas pelo caractere de controle, eles acabam sendo entendidos como lixo.
A solução é limpar a string antes de exibir. Se estiver ao seu alcance modifique o programa que gerou o dado para que ele transmita os dados sem a sujeira.
Esses caracteres são códigos de pintura ascii.
Basta remover do [ até os caracteres m, C ou D.
Geralmente dos caracteres [ até o C tem um número, que indica o número de espaços a serem dados na String. Talvez você queira tratar. Por exemplo
[10C significa que são 10 espaços seguidos.
Eu tenho uma classe que faz esse tratamento, mas ela é muito extensa e específica para postar aqui, já que é usada para fluxos de dados de redes.
Não se esqueçam que vocês não estão vendo o ESC na hora de visualizarem no JTextArea (por exemplo, ESC [1;34m é tecnicamente chamado de SGR - http://en.wikipedia.org/wiki/ANSI_escape_code .
Portanto, é necessário não só eliminar o [1;34m como também o caracter ESC (\u001B).
O artigo que menciono escreve “CSI” mas isso não é aquele seriado (Crime Scene Investigation) mas sim a sequência ESC [
Não consigo retirar os caracteres de controle da string.
if(connection.bufferSerial.contains("[1;34m")) // connection.bufferSeria é minha String
connection.bufferSerial = connection.bufferSerial.replaceAll("[1;34m", "");// nesta linha o editor do netbeans já diz expressão regular
// invalida
executando da a seguinte interrupt
Exception in thread "Thread-3" java.util.regex.PatternSyntaxException: Unclosed character class near index 5
[1;34m
^
at java.util.regex.Pattern.error(Pattern.java:1713)
retirando o “[” roda normal mas fica o “[” impresso.
connection.bufferSerial = connection.bufferSerial.replaceAll("1;34m", ""); // funciona normal
Verdade aparece varias variações. Nome de diretorio vem uma , nome de arquivo .sh vem outra e assim vai…
com sua dica acima funcionou, eu não estava retirando o ESC.