java - tolowercase - tolowecase
Uso de configuraciones regionales con toLowerCase() de Java y toUpperCase() (4)
Creo que deberías usar locale,
Por ejemplo, "TITLE" .toLowerCase () en un entorno local turco devuelve "tilet", donde "ı" es el carácter LATIN SMALL LETTER DOTLESS I. Para obtener resultados correctos para cadenas insensibles a la configuración regional, use toLowerCase (Locale.ENGLISH).
Me refiero a estos enlaces como una solución a su problema y tiene sentido tener en cuenta en su situación "turca"
**FROM THE LINKS**
toLowerCase () respeta la internacionalización (i18n). Realiza la conversión de caso con respecto a su configuración regional. Cuando llamas a LowCase (), internamente toLowerCase (Locale.getDefault ()) recibe una llamada. Es sensible a la configuración regional y no debe escribir una lógica para interpretar la configuración regional de forma independiente.
import java.util.Locale;
public class ToLocaleTest {
public static void main(String[] args) throws Exception {
Locale.setDefault(new Locale("lt")); //setting Lithuanian as locale
String str = "/u00cc";
System.out.println("Before case conversion is "+str+
" and length is "+str.length());// Ì
String lowerCaseStr = str.toLowerCase();
System.out.println("Lower case is "+lowerCaseStr+
" and length is "+lowerCaseStr.length());// iı`
}
}
En el programa anterior, observe la longitud de la cadena antes y después de la conversión. Será 1 y 3. Sí, la longitud de la cadena antes y después de la conversión del caso es diferente. Su lógica será un lanzamiento cuando dependa de la longitud de la secuencia en este escenario. Cuando su programa se ejecuta en un entorno diferente, puede fallar. Esta será una buena captura en la revisión del código.
Para hacerlo más seguro, puede usar otro método para LowCase (Locale.English) y anular la configuración regional en inglés siempre. Pero luego no estás internacionalizado.
Entonces, el quid de la cuestión es que toLowerCase () es específico de la localidad.
Referencia 1
referencia 2
referencia 3
Dotless-i, es una ''i'' minúscula sin punto. La mayúscula de este personaje es el "Yo" habitual. Hay otro personaje, "Yo con punto". La letra minúscula de este carácter es la "i" minúscula habitual.
¿Has notado el problema? Esta conversión no simétrica causa un problema grave en la programación. Enfrentamos este problema principalmente en aplicaciones Java debido a la implementación deficiente (IMHO) de las funciones toLowerCase y toUpperCase.
En Java, el método String.toLowerCase () convierte los caracteres a minúsculas de acuerdo con la configuración regional predeterminada. Esto causa problemas si su aplicación funciona en la configuración regional de Turquía y especialmente si está utilizando esta función para un nombre de archivo o una URL que debe obedecer a un determinado conjunto de caracteres.
Ya publiqué en mi blog dos ejemplos serios: los errores de compilación con las bibliotecas de scripts con "i" en sus nombres y la falla del administrador de XSP si una página está en una base de datos con "I" en su nombre.
Hay una larga historia, como dije. Por ejemplo, en alguna versión R7, el enrutador no pudo enviar un mensaje a un destinatario si su nombre comienza con "I". Los agentes de informes de mensajes no se estaban ejecutando en la configuración turca hasta R8. Cualquier persona con configuración regional turca no podría instalar Lotus Notes 8.5.1 (¡es real!). La lista continua...
Casi no hay un beta tester de Turquía y los clientes no abren PMR por estos problemas. Entonces estos problemas no van a la primera prioridad para los equipos de desarrollo.
Incluso el equipo de Java ha agregado una advertencia especial a la última documentación:
Este método es sensible a la configuración regional y puede producir resultados inesperados si se usa para cadenas que se deben interpretar de manera independiente. Algunos ejemplos son identificadores de lenguaje de programación, claves de protocolo y etiquetas HTML. Por ejemplo, "TITLE" .toLowerCase () en un entorno local turco devuelve "tilet", donde "ı" es el carácter LATIN SMALL LETTER DOTLESS I. Para obtener resultados correctos para cadenas insensibles a la configuración regional, use toLowerCase (Locale.ENGLISH).
POR FAVOR, LEA LOS ENLACES QUE NO PUEDO PUBLICAR TODO "ESTO ES RESPUESTA A SU COMENTARIO"
Quería que el código convirtiera todos los caracteres en cadenas a mayúsculas o minúsculas en Java.
Encontré un método que dice algo como esto:
public static String changelowertoupper()
{
String str = "CyBeRdRaGoN";
str=str.toLowerCase(Locale.ENGLISH);
return str;
}
Ahora he leído que usando ciertos Locale
, como el turco, "devuelve i (sin punto) en lugar de i (con punto) ".
¿Es seguro usar Locale
como UK, US, ENGLISH, etc.? ¿Hay grandes diferencias entre ellos cuando se aplican a las cadenas?
¿Cuál es la configuración Locale
más preferida para String
s?
Puede crear una configuración regional adecuada para el idioma de su String
.
Por ejemplo:
toUpperCase(new Locale("tr","TR"));
hará el truco para el turco.
Si está utilizando esta función para verificar una cadena (por ejemplo, buscar), es seguro usar las cadenas en mayúsculas o minúsculas para verificar. Puedes usarlo así:
if (mViewData.list.data[i].Name.toLowerCase(new Locale("tr", "TR"))
.contains(mViewHolder.tctSearch.getText().toString().trim()
.toLowerCase(new Locale("tr", "TR")))) {
// your code here...
}
Enfrentaré el mismo problema pero en un caso de búsqueda en la lista. Agregué esta respuesta que puede ayudar a alguien que tiene el mismo problema.
String str = "CyBeRdRaGoN";
str = str.toLowerCase(); // str = "cyberdragon"
str = str.toUpperCase(); // str = "CYBERDRAGON"
Su aplicación elegirá la configuración regional predeterminada, por lo que si alguien ejecuta su aplicación en turco con configuración local turca, verá i
sin punto