Convertir un carácter a mayúsculas en Java

5 minutos de lectura

avatar de usuario de shep
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);

  • ¿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

Avatar de usuario de BalusC
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.

Avatar de usuario de Rahul Sharma
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 de c ^ 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

Avatar de usuario de FelixSFD
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

¿Ha sido útil esta solución?