2008-10-21 15 views
28

Kann jemand druckbare Zeichen in Java erkennen?druckbare Char in Java

Nach einer Weile (Versuch/Fehler) I dieser Methode erhalten:

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

ich die Eingabe über KeyListener bekommen und kommen Ctr-'key‘gedruckt einen Platz. Mit dieser Funktion scheint ziemlich genug zu sein.

Fehle ich hier ein wenig char?

Vielen Dank im Voraus.

+0

ich nie verstanden habe. warum Java kein 'Character.isPrintable()' -Methode hat d. Eine andere Technik besteht darin, 'Character.getType (ch)' mit allen druckbaren Unicode-Zeichenklassen zu vergleichen, was immer noch sehr mühsam erscheint. –

+0

Sie sollten dies berücksichtigen, diese Antwort hat dies für mich getan: http://stackoverflow.com/a/41100873/5285687 – YellowJ

Antwort

36

Es scheint, dies war die „Schrift“ unabhängige Art und Weise

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

Ich bin mir nicht ganz sicher, ob ich Ihr Problem verstehe. Aber wenn Sie wollen feststellen, ob Zeichen Graphics-Objekt gezeichnet werden können, und wenn nicht einige Platzhalter drucken char Sie nützlich finden könnten:

Font.canDisplay(int) 

Es wird prüfen, ob Schrift spezifischen Codepunkt angezeigt werden kann (es ist mehr die prüfen, ob Schrift überhaupt angezeigt werden kann - da Zeichen gibt, die angezeigt werden kann - wie ein -. aber einige Schriftarten kippen sie angezeigt werden

+0

Dies funktioniert auch. Vielen Dank. Ich drucke auf einen Buchstaben alle Zeichen in der Tastatur geschrieben. Ohne diese Validierung^c, "RETURN" "ESC" F1..F12 Zeichen werden als seltsame kleine Quadrate angezeigt. Beide (meine Funktion und Ihre Methode) filtern sie richtig. Ich denke, ich sollte einen Testfall hinzufügen. – OscarRyz

+0

Ok, es funktionierte mit den Zeichen in meiner Tastatur, aber nach iterieren von 0 bis Character.MAX_VALUE gibt es eine Reihe von Zeichen, die von Font.canDisplay() um Zeichen 384 nicht angezeigt werden können. Das hängt von der Benutzerschriftart ab. Beide werden funktionieren. Vielen Dank – OscarRyz