2014-05-14 13 views
5

Miałem pytanie dotyczące znaków kontrolnych. Muszę znaleźć je w ciągu i usunąć je. Zrobiłem kilka badań i znalazłem przydatne wskazówki.Znaleźć znaki kontrolne zapisane w bajtach w Javie

pisałem tak:

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

Ale zapytano mnie, czy ta metoda może znaleźć znaki sterujące, jeśli są one napisane w bajtach. Szczerze mówiąc, nie mam pojęcia. Spróbuj spojrzeć na sieć, ale nie wiem, jak ją przetestować.

Dzięki

+0

Ile miejsca zajmuje każda postać w bajtach? 2 bajty lub jeden bajt? Możesz spróbować porównać całkowitą wartość bajtu z wartością ascii klawiszy sterujących. – OnePunchMan

+0

Co robi Cc? Widzę {Ctrl} tutaj: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html, ale nic o Cc. Dzięki. – user420667

Odpowiedz

3

Tak, znaki zostaną usunięte, patrz następny kod:

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("=========="); 

Wyjście do tego kodu będzie:

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

Gdy znak specjalny jest zawarty w obiekcie String nie robi nie ma znaczenia, czy został utworzony z bajtu [] lub cokolwiek innego obiektu, Jest przechowywany zawsze w tym samym formacie.

+0

Wielkie dzięki, jestem uspokojony :) – Tony

0

Jeśli przez „napisany w bajtach” to znaczy, że Twój wkład jest tablica bajtów, można napisać

String s = new String(myByteArray) 

i użyć kodu na s.

+0

Żadne moje wejście nie jest ciągiem, ale powiedział mi to: "ale czy zadziała z bajtami, ponieważ znaki kontrolne są reprezentowane w ten sposób." Ale pierwszym wejściem, które otrzymuję, jest ciąg. Tak więc dla mnie moja metoda musi działać. – Tony

+0

Potem nie rozumiem pytania. Jakie bajty? – Zoyd

+0

To też jest mój problem. - Pytałem go, czego chce, ale nie miałem już wytłumaczenia. Powiedział, że musisz przekonwertować ciąg na bajt (myString.getBytes (Charset.forName ("UTF-8"))), a następnie znajdź znaki kontrolne. I ponownie przekształcić w ciąg. Dla mnie wydaje się to bezużyteczne ... ponieważ jeśli mamy String, po prostu użyj mojego wyrażenia regularnego. – Tony