2008-10-21 6 views
28

Est-ce que quelqu'un sait comment détecter les caractères imprimables dans Java?caractères imprimables en Java

Après un certain temps (essai/erreur) Je reçois à cette méthode:

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

Je reçois l'entrée via KeyListener et venez Ctr-'key » imprimer un carré. Avec cette fonction semble assez assez.

Ai-je manqué du char ici?

Merci d'avance.

+0

Je ne l'ai jamais compris. pourquoi Java n'a pas de méthode 'Character.isPrintable()' ré. Une autre technique consiste à comparer 'Character.getType (ch)' avec toutes les classes de caractères Unicode imprimables, ce qui semble encore beaucoup d'efforts à faire. –

+0

Vous devriez considérer ceci, cette réponse a fait ceci pour moi: http://stackoverflow.com/a/41100873/5285687 – YellowJ

Répondre

36

Il semble que ce fut la « police » de manière indépendante

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

Je ne sais pas exactement si je comprends votre problème. Mais si vous voulez détecter si le caractère peut être dessiné à l'objet Graphics et sinon imprimer un certain espace réservé ombles vous trouverez peut-être utile:

Font.canDisplay(int) 

Il vérifiera si la police peut afficher codepoint spécifique (il est plus que vérifier si la police est affichable du tout - car il y a les caractères qui sont affichable - comme un -. mais certaines polices ne peuvent pas les afficher

+0

Cela a fonctionné aussi. Je vous remercie. J'imprime sur un jlabel tout le caractère écrit sur le clavier. Sans cette validation^c, "RETURN" "ESC" F1..F12 caractères sont affichés comme des petits carrés étranges. Les deux (ma fonction et votre méthode) les filtrent correctement. Je suppose que je devrais ajouter un cas de test. – OscarRyz

+0

Ok, cela a fonctionné avec les caractères de mon clavier, mais après avoir passé de 0 à Character.MAX_VALUE, il y a un certain nombre de caractères qui ne peuvent pas être affichés par Font.canDisplay() autour du caractère 384. Cela dépend de la police de l'utilisateur. Les deux vont travailler. Je vous remercie – OscarRyz

Questions connexes