oveja
¿Cómo podría obtener el f
y l
variables convertidas a mayúsculas?
String lower = Name.toLowerCase();
int a = Name.indexOf(" ",0);
String first = lower.substring(0, a);
String last = lower.substring(a+1);
char f = first.charAt(0);
char l = last.charAt(0);
System.out.println(l);
BalusC
Puedes usar Character#toUpperCase()
para esto.
char fUpper = Character.toUpperCase(f);
char lUpper = Character.toUpperCase(l);
Sin embargo, tiene algunas limitaciones, ya que el mundo conoce muchos más caracteres de los que pueden caber en 16 bits. char
rango. Véase también el siguiente extracto de la javadoc:
Nota: Este método no puede manejar caracteres suplementarios. Para admitir todos los caracteres Unicode, incluidos los caracteres complementarios, utilice el
toUpperCase(int)
método.
Raúl Sharma
En lugar de utilizar las utilidades existentes, puede intentar la siguiente conversión mediante la operación booleana:
A mayúsculas:
char upperChar="l" & 0x5f
En minúsculas:
char lowerChar="L" ^ 0x20
Cómo funciona:
Tabla binaria, hexadecimal y decimal:
------------------------------------------
| Binary | Hexadecimal | Decimal |
-----------------------------------------
| 1011111 | 0x5f | 95 |
------------------------------------------
| 100000 | 0x20 | 32 |
------------------------------------------
Tomemos un ejemplo de pequeños l
a L
conversión:
La operación AND binaria: (l & 0x5f)
l
el personaje tiene ASCII 108 y 01101100
es representación binaria.
1101100
& 1011111
-----------
1001100 = 76 in decimal which is **ASCII** code of L
Del mismo modo el L
a l
conversión:
La operación binaria XOR: (L ^ 0x20)
1001100
^ 0100000
-----------
1101100 = 108 in decimal which is **ASCII** code of l
-
Sinceramente, estoy sorprendido de que esto tenga 7 votos. Si bien aplaudo el enfoque inteligente, ser inteligente rara vez conduce a un código mantenible, especialmente cuando se usa en lugar de un método integrado como
Character.toUpperCase()
. Cualquier usuario de esto debe entender que no manejará nada que no sea ASCII.-Adam Hewitt
6 sep 2017 a las 15:52
-
@AdamHewitt, este enfoque también funciona con caracteres que no son ASCII, por ejemplo, ‘250’, sin embargo, algunos caracteres que no son ASCII no darían los resultados esperados. Su punto es correcto: los usuarios deben comprender el uso correcto de este enfoque y debe usarse principalmente para alfabetos ingleses.
– Raúl Sharma
06/09/2017 a las 17:37
-
Creo que debería ser
c | 0x20
en lugar dec ^ 0x20
para minúsculas. De lo contrario, si el carácter ya está en minúsculas, su código lo convertirá a mayúsculas– Steven Yue
16 de febrero de 2018 a las 1:52
Echa un vistazo a la java.lang.Character
clase, proporciona muchos métodos útiles para convertir o probar caracteres.
-
+1 Me gustan las respuestas que le dan al usuario una referencia para ir a buscar la respuesta
–Anthony Forloney
12 de septiembre de 2010 a las 20:24
-
-1, si rastreamos a los estudiantes, eliminamos uno de los SO principales beneficios. No gastar cantidades excesivas de tiempo siguiendo las referencias anidadas de las personas a través de enlaces rotos.
– ebt
18 de enero de 2014 a las 16:48
f = Character.toUpperCase(f);
l = Character.toUpperCase(l);
Como sabe que los caracteres están en minúsculas, puede restar el valor ASCII correspondiente para convertirlos en mayúsculas:
char a="a";
a -= 32;
System.out.println("a is " + a); //a is A
Aquí hay un tabla ASCII para referencia
-
Esto solo funciona si la cadena está compuesta exclusivamente por caracteres ASCII. Idiomas como francés, griego, español, turco, etc., tienen caracteres que no son ASCII con formas superiores e inferiores. Este enfoque no funcionaría en esos casos…
–Mike Laren
8 de febrero de 2015 a las 3:08
-
En realidad, este enfoque básico hace trabajar para los caracteres no ASCII más comunes en francés, español, alemán… p. ej.
é
à
ö
û
ñ
… Entonces, si el OP sabe que solo tendrá que lidiar con tales personajes, puede apegarse a este método en aras de la simplicidad y el rendimiento.– Sébastien
13 de octubre de 2015 a las 13:18
-
Hacer cálculos con caracteres para cambiar el caso es uno de los peores hábitos, ¡y por lo tanto no del siglo XXI! ¡Hay más que caracteres ASCII!
– Floyd
17 de diciembre de 2015 a las 8:49
FélixSFD
System.out.println(first.substring(0,1).toUpperCase());
System.out.println(last.substring(0,1).toUpperCase());
-
Esto solo funciona si la cadena está compuesta exclusivamente por caracteres ASCII. Idiomas como francés, griego, español, turco, etc., tienen caracteres que no son ASCII con formas superiores e inferiores. Este enfoque no funcionaría en esos casos…
–Mike Laren
8 de febrero de 2015 a las 3:08
-
En realidad, este enfoque básico hace trabajar para los caracteres no ASCII más comunes en francés, español, alemán… p. ej.
é
à
ö
û
ñ
… Entonces, si el OP sabe que solo tendrá que lidiar con tales personajes, puede apegarse a este método en aras de la simplicidad y el rendimiento.– Sébastien
13 de octubre de 2015 a las 13:18
-
Hacer cálculos con caracteres para cambiar el caso es uno de los peores hábitos, ¡y por lo tanto no del siglo XXI! ¡Hay más que caracteres ASCII!
– Floyd
17 de diciembre de 2015 a las 8:49
Si incluye Apache Commons Lang jar en su proyecto, la solución más fácil sería hacer lo siguiente:
WordUtils.capitalize(Name)
se encarga de todo el trabajo sucio por ti. ver el javadoc aquí
Alternativamente, también tiene un método capitalizeFully(String) que también pone en minúsculas el resto de los caracteres.
-
El enlace usted proporcionó da error 404 !!!! puedes corregirlo??
– Visruth
5 de julio de 2013 a las 10:50
¿Qué parte de las respuestas a tu pregunta anterior no entendiste? Mi respuesta allí contiene una respuesta a esta pregunta.
– Bozho
12 de septiembre de 2010 a las 20:24
@shep – ¿Puedes aceptar la respuesta de BalusC? Ayudará a futuros buscadores.
– charles allen
9 de octubre de 2017 a las 2:19