especiales - reemplazar caracteres en java
Reemplazar caracteres de control Unicode (1)
Necesito reemplazar todo el carácter de control especial en una cadena en Java.
Quiero preguntarle a Google Maps API v3, y parece que a Google no le gustan estos personajes.
Ejemplo: http://www.google.com/maps/api/geocode/json?sensor=false&address=NEW%20YORK%C2%8F
Esta URL contiene este caracter: http://www.fileformat.info/info/unicode/char/008f/index.htm
Entonces recibo algunos datos, y necesito geocodificar estos datos. Sé que algún personaje no aprobaría la geocodificación, pero no sé la lista exacta.
No pude encontrar ninguna documentación sobre este tema, por lo que creo que la lista de caracteres que Google no le gusta es esta: http://www.fileformat.info/info/unicode/category/Cc/list.htm
¿Hay alguna función ya creada para deshacerse de estos personajes, o tengo que construir uno nuevo, con un reemplazo uno por uno?
¿O hay una buena expresión regular para hacer el trabajo?
¿Alguien sabe qué lista exacta de caracteres no le gusta a Google?
Editar: Google ha creado una página web para esto:
https://developers.google.com/maps/documentation/webservices/?hl=fr#BuildingURLs
Si desea eliminar todos los caracteres en la categoría Otro / Control Unicode, puede hacer algo como esto:
System.out.println(
"a/u0000b/u0007c/u008fd".replaceAll("//p{Cc}", "")
); // abcd
Tenga en cuenta que esto realmente elimina (entre otros) ''/u008f''
caracteres Unicode de la cadena, no la cadena escapada "%8F"
.
Si la lista negra no está bien capturada por un bloque / categoría Unicode, Java tiene una poderosa aritmética de clase de caracteres con intersección, resta, etc. que puede usar. Alternativamente, también puede usar un enfoque negated whitelist, es decir, en lugar de especificar explícitamente qué caracteres son ilegales, usted especifica qué es legal y todo lo demás se vuelve ilegal.
Enlaces API
Ejemplos
Aquí hay un ejemplo de resta:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[a-z&&[^aeiou]]", "_")
);
// _e_u_a_ e___e__io__: _o_ _ou _a_e __o __o__e__!!
El […]
es una clase de personaje . Algo como [aeiou]
coincide con una de las vocales en minúsculas. [^…]
es una clase de personaje negada . [^aeiou]
coincide con cualquier cosa menos las vocales en minúsculas.
[az&&[^aeiou]]
coincide con [az]
restado por [aeiou]
, es decir, todas las consonantes en minúsculas.
El siguiente ejemplo muestra el enfoque negated whitelist:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[^a-z]", "_")
);
// regular_expressions__now_you_have_two_problems__
Solo las minúsculas az
son legales; todo lo demás es ilegal