2008-10-21 34 views
28

Có ai biết cách phát hiện các ký tự có thể in trong java không?char có thể in trong java

Sau một thời gian (dùng thử/lỗi) tôi nhận được để phương pháp này:

public boolean isPrintableChar(char c) { 
     Character.UnicodeBlock block = Character.UnicodeBlock.of(c); 
     return (!Character.isISOControl(c)) && 
       c != KeyEvent.CHAR_UNDEFINED && 
       block != null && 
       block != Character.UnicodeBlock.SPECIALS; 
    } 

Tôi nhận được đầu vào thông qua KeyListener và đến Ctr-'key' in một hình vuông. Với chức năng này có vẻ khá đủ.

Tôi có thiếu một số char ở đây không?

Cảm ơn bạn trước.

+0

tôi chưa bao giờ hiểu. tại sao Java không có một 'Character.isPrintable()' metho d. Một kỹ thuật khác là so sánh 'Character.getType (ch)' với tất cả các lớp ký tự Unicode có thể in, mà vẫn có vẻ như rất nhiều nỗ lực để đi đến. –

+0

Bạn nên xem xét điều này, câu trả lời này đã làm điều này cho tôi: http://stackoverflow.com/a/41100873/5285687 – YellowJ

Trả lời

36

có vẻ như đây là "font" cách độc lập

public boolean isPrintableChar(char c) { 
    Character.UnicodeBlock block = Character.UnicodeBlock.of(c); 
    return (!Character.isISOControl(c)) && 
      c != KeyEvent.CHAR_UNDEFINED && 
      block != null && 
      block != Character.UnicodeBlock.SPECIALS; 
} 
11

Tôi không chắc chắn liệu tôi có hiểu vấn đề của bạn hay không. Nhưng nếu bạn muốn phát hiện nếu nhân vật có thể bị thu hút bởi đối tượng đồ họa, và nếu không in một số placeholder char bạn có thể thấy hữu ích:

Font.canDisplay(int) 

Nó sẽ kiểm tra xem font chữ có thể hiển thị điểm mã cụ thể (nó là nhiều đó kiểm tra xem font chữ là thể hiển thị ở tất cả - kể từ khi có ký tự có thể hiển thị - giống như một -. nhưng một số phông chữ không thể hiển thị chúng

+0

Điều này cũng làm việc. Cảm ơn bạn. Tôi đang in trên một nhãn tất cả các ký tự được viết trong bảng phím. Với xác thực này^c, "RETURN" "ESC" F1..F12 ký tự được hiển thị dưới dạng hình vuông nhỏ lạ. Cả hai (chức năng của tôi và phương pháp của bạn) lọc chúng đúng cách. Tôi đoán tôi nên thêm một số trường hợp thử nghiệm. – OscarRyz

+0

Ok, Nó hoạt động với các ký tự trong bàn phím của tôi, nhưng sau khi lặp từ 0 thành Ký tự.MAX_VALUE có một số ký tự không thể được hiển thị bởi Font.canDisplay() quanh char 384. Điều đó phụ thuộc vào phông chữ của người dùng. Cả hai sẽ hoạt động. Cảm ơn bạn – OscarRyz

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