Pregunta

He intentado escribir literales de char para las vocales acentuadas en Java, pero los compiladores dice algo como: no cerrada carácter literal

Esto es lo que estoy tratando de hacer:

 char [] a = {'à', 'á', 'â', 'ä' };

He intentado usar Unicode '\u00E0' pero por alguna razón no coinciden con mi código:

 for( char c : string.toCharArray() ) {
     if( c == a[i] ) {
         // I've found a funny letter 
     }
 }

El if nunca se evalúa como verdadera, no importa lo que he puesto en mi cadena.

Aquí está la programa completo estoy tratando de código.

¿Fue útil?

Solución

El código debe ser compilado con la codificación correcta:

javac -encoding UTF-8 Foo.java

Habrá una codificación falta de coincidencia en alguna parte.

public class Foo {
  char [] a = {'à', 'á', 'â', 'ä' };  
}

El código anterior guardado como UTF-8 debe convertirse en el volcado hexadecimal:

70 75 62 6C 69 63 20 63 6C 61 73 73 20 46 6F 6F         public class Foo
20 7B 0D 0A 20 20 63 68 61 72 20 5B 5D 20 61 20          {__  char [] a
3D 20 7B 27 C3 A0 27 2C 20 27 C3 A1 27 2C 20 27         = {'__', '__', '
C3 A2 27 2C 20 27 C3 A4 27 20 7D 3B 20 20 0D 0A         __', '__' };  __
7D 0D 0A 0D 0A                                          }____

El valor UTF-8 para punto de código U + 00e0 (a) es C3 A0.

El código debe ser compilado con la codificación correcta:

javac -encoding UTF-8 Foo.java

No existe una remota posibilidad de que una estará representada por la secuencia de la combinación de U + 0061 U + 0300. Esta es la NFD forma (I' nunca ha llegado a través de un editor de texto que se utiliza como valor predeterminado para la entrada de texto). Como señala Thorbjørn Ravn Andersen a cabo, a menudo es mejor utilizar siempre \ uXXXX secuencias de escape -. es menos ambiguo

También es necesario comprobar el dispositivo de entrada (archivo / consola / etc.)

Como último recurso, se puede volcar sus chars como System.out.format("%04x", (int) c); hexagonal y probarlos decodificación de forma manual con un inspector de carácter para averiguar cuáles son.

Otros consejos

Para los caracteres Unicode para trabajar, debe estar seguro de que javac lee en la misma codificación que está escrito.

se ahorrará un montón de problemas sólo por el uso de la notación \ uXXXX.

Busque los valores de caracteres Unicode, y literales uso de la forma \uxxxx.

U + 00E es una con un acento grave, por ejemplo.

char aacute = '\u00e1';

La siguiente pregunta es dónde está su cadena de vino. ¿Estás seguro de que tiene estos personajes? Como caracteres compuestos? Mejor imprimir algunos fuera en hexadecimal y echar un vistazo.

Puede que sea necesario para normalizar (en Java 1.6 o con icu4j).

Esto parecía funcionar para mí en una prueba rápida:

static char [] a = {'à', 'á', 'â', 'ä' };


    public static boolean foundMatch(String s){

        boolean test = false;
        for(int i=0;i < a.length;i++){
            String t = String.valueOf(a[i]);
            test = s.contains(t);
            if (test) return true;
    }
        return test;
    }

Usted no menciona lo que necesita para llevar a cabo (es decir, por qué necesita para encontrar caracteres acentuados en una cadena), voy a aventurar una respuesta que tiene que hacer algo más que simplemente comprobar si hay caracteres acentuados presentes en una pieza de entrada. En el riesgo de que le dice algo que ya sabes:

  • Si necesita filtrar fuera de una cadena de texto le recomiendo que utilice listas blancas en lugar de las listas negras.
  • Si usted necesita para ordenar alfabéticamente independientemente de acentuación, utilice java.text.Collator en lugar de un sistema de rodillos-su-propio.
  • Si es necesario sustituir los caracteres acentuados por sus caracteres 'base', la Compaginadora debería volver a ser de ayuda (las cosas de descomposición dentro de él), pero no he hecho esto antes, así que no puede decirle cómo hacerlo exactamente.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top