2008-10-21 13 views
28

Java'da yazdırılabilir karakterleri nasıl algılayacağını bilen var mı? Bu yönteme olsun bir süre (deneme/hata) sonrayazdırılabilir karakter in vva

:

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; 
    } 

Ben KeyListener aracılığıyla sinyal almadığı ve 'Ctr-'key gelirim bir kare baskılı. Bu işlev ile oldukça yeterli görünüyor.

Burada bazı char eksik muyum?

Önceden teşekkür ederiz.

+0

. Java'nın neden bir 'Character.isPrintable()' metodu yoktur? d. Diğer bir teknik ise, 'Character.getType (ch)' ile yazdırılabilir tüm Unicode karakter sınıflarını karşılaştırmaktır. –

+0

Bunu düşünmelisiniz, bu cevap benim için yaptı: http://stackoverflow.com/a/41100873/5285687 – YellowJ

cevap

36

"Yazı" bağımsız bir yol olduğunu görünüyor ben hiç anlamadım

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

Sorununuzu anlayabildiğimden kesinlikle emin değilim. Karakter Grafik nesnesine çizilebilir eğer algılamak ve yararlı bulmaktadırlar olabilir Char değilse bazı yer tutucu yazdırmak istiyorsanız: Bu yazı özgü codepoint görüntüleyebilir olmadığını kontrol edecektir

Font.canDisplay(int) 

(o yazı olup olmadığını kontrol etmeniz daha hiç görüntülenebılen - A gibi - - orada gösterilebilecek karakter olduğundan. ama bazı yazı tipleri onları görüntülemek olamaz

+0

Bu da çalıştı. Teşekkür ederim. Anahtar kartında yazılı olan tüm karakterleri bir jelabel üzerine yazdırıyorum. Bu doğrulama ile^c, "RETURN" "ESC" F1..F12 karakterleri tuhaf küçük kareler olarak görüntülenir. Her ikisi de (işlevim ve yönteminiz) bunları düzgün bir şekilde filtreler. Sanırım bir test vakası eklemeliyim. – OscarRyz

+0

Tamam, Klavyedeki karakterlerle çalıştı, ancak 0'dan Karakter.MAX_VALUE öğesine yineledikten sonra, char 384'ün etrafında Font.canDisplay() tarafından görüntülenemeyen bir dizi karakter var. Bu, kullanıcı yazı tipine göre değişir. Her ikisi de işe yarayacak. teşekkür ederim – OscarRyz