2008-10-21 25 views
28

¿Alguien sabe cómo detectar caracteres imprimibles en java?char imprimible en java

Después de un tiempo (ensayo/error) llego a este método:

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

estoy recibiendo la entrada a través de KeyListener y llegar Ctr-'y' imprimió un cuadrado. Con esta función parece bastante suficiente.

¿Me falta algo de char aquí?

Gracias de antemano.

+0

nunca he entendido. por qué Java no tiene un metodo 'Character.isPrintable()' re. Otra técnica es comparar 'Character.getType (ch)' con todas las clases de caracteres Unicode imprimibles, lo que todavía parece ser un gran esfuerzo. –

+0

Debería considerar esto, esta respuesta hizo esto por mí: http://stackoverflow.com/a/41100873/5285687 – YellowJ

Respuesta

36

parece que esta era la "fuente" de manera independiente

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

No estoy seguro si entiendo su problema. Pero si desea detectar si el personaje puede ser atraído por objeto Graphics, y si no imprime algunas marcador de posición carbón que puede encontrar útil:

Font.canDisplay(int) 

Se comprobará si la fuente se mostrará punto de código específica (es más que comprobar si la fuente es visualizable en todos - ya que hay caracteres que son visualizables - como un -. pero algunas fuentes no puedo mostrarlas

+0

Esto funcionó también. Gracias. Estoy imprimiendo en un jlabel todo el carácter escrito en el teclado. Sin esta validación^c, los caracteres "RETORNO" "ESC" F1..F12 se muestran como pequeños cuadrados extraños. Ambos (mi función y tu método) los filtran correctamente. Creo que debería agregar un caso de prueba. – OscarRyz

+0

Ok, funcionó con los caracteres en mi teclado, pero después de iterar de 0 a Character.MAX_VALUE hay una cantidad de caracteres que no se pueden mostrar con Font.canDisplay() alrededor del carácter 384. Eso depende de la fuente del usuario. Ambos funcionarán. Gracias – OscarRyz

Cuestiones relacionadas