2014-05-14 16 views
5

Tôi có câu hỏi về các ký tự điều khiển. Tôi phải tìm thấy chúng trong một chuỗi và xóa chúng. Đã thực hiện một số nghiên cứu và tìm thấy các mẹo hữu ích.Tìm các ký tự điều khiển được viết bằng byte trong Java

tôi đã viết này:

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

Nhưng tôi được hỏi nếu phương pháp này có thể tìm thấy các ký tự điều khiển nếu chúng được viết bằng byte. Thành thật mà nói, tôi không có ý tưởng. Hãy thử nhìn trên mạng, nhưng không biết làm thế nào tôi có thể kiểm tra nó.

Cảm ơn

+0

bao nhiêu không gian là mỗi ký tự chiếm theo byte? 2byte hoặc một byte? Bạn có thể thử so sánh giá trị số nguyên của byte với giá trị ascii của các phím điều khiển. – OnePunchMan

+0

Cc làm gì? Tôi thấy {Ctrl} ở đây: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html, nhưng không có gì về Cc. Cảm ơn. – user420667

Trả lời

3

Vâng, các nhân vật sẽ bị xóa, xem mã tiếp theo:

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

Kết quả cho mã đó sẽ là:

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

Khi ký tự đặc biệt được bao gồm trong một đối tượng String nó doesn không quan trọng nếu được tạo từ một byte [] hoặc bất kỳ đối tượng nào khác, Nó được lưu trữ luôn ở định dạng tương tự.

+0

Cảm ơn rất nhiều, tôi đã yên tâm :) – Tony

0

Nếu bằng cách "viết bằng byte" bạn có nghĩa là đầu vào của bạn là một mảng byte, bạn có thể viết

String s = new String(myByteArray) 

và sử dụng mã của bạn trên s.

+0

Không có đầu vào của tôi là một String, nhưng ông nói với tôi điều này: "nhưng nó sẽ làm việc với byte? Nguyên nhân kiểm soát ký tự được đại diện theo cách đó." Nhưng đầu vào đầu tiên mà tôi nhận được là một chuỗi. Vì vậy, đối với tôi, phương pháp của tôi phải làm việc. – Tony

+0

Sau đó, tôi không hiểu câu hỏi. Byte gì? – Zoyd

+0

Đó là vấn đề của tôi quá -_-'... Tôi hỏi anh ta những gì anh ta muốn, nhưng không giải thích thêm. Ông nói, bạn phải chuyển đổi chuỗi của bạn thành byte (myString.getBytes (Charset.forName ("UTF-8")))) sau đó tìm các ký tự điều khiển. Và chuyển đổi thành chuỗi một lần nữa. Đối với tôi có vẻ vô ích ... bởi vì nếu chúng ta có một String, chỉ cần sử dụng regex của tôi. – Tony

Các vấn đề liên quan