2012-07-03 9 views
8

Ví dụ -Làm cách nào để biết rằng Chuỗi của tôi chứa dấu phụ?

text = Československá obchodní banka; 

text string contains diacritics like Č , á etc. 

Tôi muốn viết một hàm nơi mà tôi sẽ vượt qua chuỗi này "Československá obchodní Banka" và function will return true if string contains diacritics else false.

Tôi phải xử lý dấu phụ và chuỗi chứa ký tự không thuộc phạm vi A-z hoặc a-z riêng biệt.

1) If String contains diacritics then I have to do some XXXXXX on it. 

2) If String contains character other than A-Z or a-z and not contains diacritics then do some other operations YYYYY. 

Tôi không biết cách thực hiện.

+0

các trường hợp sử dụng là gì? Bởi "dấu phụ", bạn có thực sự muốn nói rằng bạn muốn tìm các chữ cái có chứa dấu phụ, hay bạn có ý nghĩa * bất kỳ chữ cái nào * không nằm trong phạm vi A-Z? Điều gì về các chữ cái không phải là chữ cái Latinh như 'じ' mà bạn có thể tranh luận có chứa dấu tương đương với dấu phụ tiếng Nhật? – deceze

+0

tại sao không kiểm tra từng ký tự trong chuỗi và phân tích nó thành một int, bất cứ điều gì trên 127 sẽ là một dấu phụ –

+1

@David Đó là một chút quá đơn giản và chính xác lý do tại sao tôi đã hỏi những gì tôi đã yêu cầu ở trên. Tôi không biết rằng "µ" chứa dấu phụ. – deceze

Trả lời

11

Một phần kiến ​​thức: trong Unicode có mã cho á nhưng cùng một kết quả có thể nhận được với acombining mark-'.

Bạn có thể sử dụng java.text.Normalizer, như sau:

public static boolean hasDiacritics(String s) { 
    // Decompose any á into a and combining-'. 
    String s2 = Normalizer.normalize(s, Normalizer.Form.NFD); 
    return s2.matches("(?s).*\\p{InCombiningDiacriticalMarks}.*"); 
    //return !s2.equals(s); 
} 
+0

Tôi đã sửa lại câu trả lời của mình: nếu các bản gốc đã bị phân tách, một phép thử bằng sẽ không thành công. –

4

Lớp Normalizer dường như có thể thực hiện việc này. Một số thử nghiệm giới hạn cho thấy rằng

Normalizer.isNormalized(text, Normalizer.Form.NFD) 

có thể là những gì bạn cần.