2014-05-14 11 views
5

Ho avuto una domanda sui caratteri di controllo. Devo trovarli in una stringa e cancellarli. Fatto qualche ricerca e trovato suggerimenti utili.Trova caratteri di controllo scritti in byte in Java

ho scritto questo:

output.toString().replaceAll("[\\p{Cntrl}\\p{Cc}]","") 

Ma mi è stato chiesto se questo metodo può trovare i caratteri di controllo se sono scritti in byte. Ad essere onesti, non ne ho idea. Prova a guardare in rete, ma non so come posso provarlo.

Grazie

+0

quanto spazio occupa ciascun carattere in byte? 2 byte o un byte? Puoi provare a confrontare il valore intero del byte con il valore ASCII dei tasti di controllo. – OnePunchMan

+0

Cosa fa la Cc? Vedo {Ctrl} qui: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html, ma niente su Cc. Grazie. – user420667

risposta

3

Sì, saranno rimossi i caratteri, vedere codice successivo:

byte[] chars = { 'h', 'e', 10, 15, 21, 'l', 'l', 'o', 13 }; 
String str = new String(chars, "utf8"); 
System.out.println("=========="); 
System.out.println(str); 
System.out.println("=========="); 
System.out.println(str.replaceAll("[\\p{Cntrl}\\p{Cc}]", "")); 
System.out.println("=========="); 

L'uscita per quel codice sarebbe:

========== 
he 
llo 
========== 
hello 
========== 

Una volta che il carattere speciale è incluso in un oggetto String doesn 'importa se è stato creato da un byte [] o qualsiasi altro oggetto, è memorizzato sempre nello stesso formato.

+0

Grazie mille, sono rassicurato :) – Tony

0

Se per "scrivere nei byte" Vuoi dire che l'input è un array di byte, è possibile scrivere

String s = new String(myByteArray) 

e utilizzare il codice su s.

+0

Nessun mio input è una stringa, ma mi ha detto questo: "ma funzionerà con i byte? Perché i caratteri di controllo sono rappresentati in questo modo." Ma il primo input che ricevo è una stringa. Quindi per me, il mio metodo deve funzionare. – Tony

+0

Quindi non capisco la domanda. Quali byte? – Zoyd

+0

Anche questo è il mio problema -_-'... Gli ho chiesto cosa voleva, ma non avevo più spiegazioni. Ha detto che devi convertire la tua stringa in byte (myString.getBytes (Charset.forName ("UTF-8"))) quindi trovare i caratteri di controllo. E convertire nuovamente in stringa. Per me sembra inutile ... perché se abbiamo una stringa, usa la mia regex. – Tony