que - ignorar mayusculas y minusculas java
Java: división de cadena cuando se encuentra una letra mayúscula (6)
Creo que esta es una pregunta fácil, pero no puedo encontrar una solución simple (digamos, menos de 10 líneas de código :)
Tengo un String
como "thisIsMyString"
y necesito convertirlo a String[] {"this", "Is", "My", "String"}
.
Tenga en cuenta que la primera letra no está en mayúscula.
Dado que String::split
toma una expresión regular, puede usar una búsqueda anticipada:
String[] x = "thisIsMyString".split("(?=[A-Z])");
Esta expresión regular se dividirá en mayúsculas, omitiendo la primera. Por lo tanto, debería funcionar para camel-case y proper-case.
(?<=.)(?=(//p{Upper}))
TestText = Test, Text
thisIsATest = this, Is, A, Test
Para cualquiera que se pregunte cómo es el patrón cuando el String para dividir podría comenzar con un carácter en mayúscula:
String s = "ThisIsMyString";
String[] r = s.split("(?<=.)(?=//p{Lu})");
System.out.println(Arrays.toString(r));
da: [Esto, Es, Mi, Cadena]
Prueba esto;
static Pattern p = Pattern.compile("(?=//p{Lu})");
String[] s1 = p.split("thisIsMyFirstString");
String[] s2 = p.split("thisIsMySecondString");
...
Puede usar una expresión regular con una búsqueda positiva de ancho cero: encuentra letras mayúsculas pero no las incluye en el delimitador:
String s = "thisIsMyString";
String[] r = s.split("(?=//p{Upper})");
Y(?=X)
coincide con Y
seguido de X
, pero no incluye X
en el partido. Entonces (?=//p{Upper})
coincide con una secuencia vacía seguida de una letra mayúscula, y split
usa como un delimitador.
Consulte javadoc para obtener más información sobre la sintaxis de expresiones regulares de Java.
EDITAR: por cierto, tampoco funciona con thisIsMyÜberString
. Para las letras mayúsculas que no son ASCII, necesita una clase de caracteres en mayúsculas Unicode en lugar de POSIX:
String[] r = s.split("(?=//p{Lu})");
String[] camelCaseWords = s.split("(?=[A-Z])");