2010-09-12 17 views
57
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); 

cómo obtendría las variables F y L convertidas a mayúsculas.Convertir un char a mayúscula

+0

Gracias por la ayuda que me dieron wat que necesitaba – shep

+0

qué parte de las respuestas a su pregunta anterior que no entendía? Mi respuesta allí contiene una respuesta a esta pregunta. – Bozho

+0

@shep - ¿Puedes aceptar la respuesta de BalusC? Ayudará a los buscadores futuros. – AjahnCharles

Respuesta

12
f = Character.toUpperCase(f); 
l = Character.toUpperCase(l); 
16

Tener un vistazo a la clase java.lang.Character, que proporciona una gran cantidad de métodos útiles para convertir caracteres o de prueba.

+1

+1 Me gustan las respuestas que los proveedores que el usuario con una referencia va a buscar la respuesta –

+1

-1, si arrastramos para los estudiantes eliminamos uno de los principales beneficios de SO. No gastar cantidades de tiempo desproporcionadas siguiendo las referencias anidadas de personas en enlaces rotos. – ebt

116

Puede usar Character#toUpperCase() para esto.

char fUpper = Character.toUpperCase(f); 
char lUpper = Character.toUpperCase(l); 

Sin embargo, tiene algunas limitaciones ya que el mundo es consciente de muchos más caracteres de los que caben en vez de 16 bits gama char. Ver también el siguiente extracto de la javadoc:

Nota: Este método no puede manejar supplementary characters. Para admitir todos los caracteres Unicode, incluidos los caracteres suplementarios, utilice el método toUpperCase(int).

-1

La solución más fácil para su caso - Cambie la primera línea, se deja hacer justo lo contrario:

String lower = Name.toUpperCase(); 

Por supuesto, vale la pena cambiar su nombre también.

1

Si va a incluir el frasco Apache Commons Lang en su proyecto que la solución más fácil sería hacer:

WordUtils.capitalize(Name) 

se encarga de todo el trabajo sucio por ti. Consulte el javadoc here

Alternativamente, también tiene un método capitalizeFully (String) que también reduce el número de casos al resto de los caracteres.

+0

El [enlace] (http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/WordUtils.html#capitalize%28java.lang.String%29) proporcionado arroja un error 404. !!! ¿Puedes corregirlo? – Visruth

+0

Solucionado, gracias por el encabezado – Asaf

0

Puesto que usted sabe los caracteres están en minúsculas, puede restar el valor ASCII de acuerdo para que sean mayúsculas:

char a = 'a'; 
a -= 32; 
System.out.println("a is " + a); //a is A 

Aquí es un ASCII table para referencia

+4

Esto solo funciona si la cadena está compuesta exclusivamente de caracteres ASCII. Los idiomas como francés, griego, español, turco, etc. tienen caracteres no ASCII con formas superior/inferior. Este enfoque no funcionaría en esos casos ... –

+0

En realidad, este enfoque básico * does * funciona 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 tratar con tales personajes, puede apegarse a este método en aras de la simplicidad y el rendimiento. –

+1

Hacer cálculos con personajes para cambiar el caso es uno de los peores hábitos, ¡y por eso no es del siglo XXI! ¡Hay más que ascii chars! – Floyd

2

Puede aplicar el .toUpperCase() directamente en variables de cadena o como un atributo para los campos de texto.Ej: -

String str; 
TextView txt; 

str.toUpperCase();// will change it to all upper case OR 
txt.append(str.toUpperCase()); 
txt.setText(str.toUpperCase()); 
12

En lugar de utilizar los servicios públicos existentes, puede tratar a continuación conversión mediante operación booleana:

a mayúsculas:

char upperChar = 'l' & 0x5f 

a minúsculas:

char lowerChar = 'L'^0x20 

Cómo funciona:

binario, hexadecimal y mesa decimales:

------------------------------------------ 
| Binary | Hexadecimal  | Decimal | 
----------------------------------------- 
| 1011111 | 0x5f   | 95  | 
------------------------------------------ 
| 100000 | 0x20   | 32  | 
------------------------------------------ 

Tomemos un ejemplo de pequeña l-L conversión:

El binario operación AND : (l & 0x5f)

l 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-l conversión:

La operación XOR binaria: (L^0x20)

1001100 
^ 0100000 
----------- 
    1101100 = 108 in decimal which is **ASCII** code of l 
+2

Estoy sinceramente sorprendido de que esto tiene 7 votos. Si bien aplaudo el enfoque ingenioso, ser inteligente rara vez lleva a un código de mantenimiento, especialmente cuando se usa en lugar de un método incorporado como 'Character.toUpperCase()'. Cualquier usuario de esto debería entender que no manejará nada que no sea ASCII. –

+1

@AdamHewitt Este enfoque funciona también con caracteres no ASCII, p. '250', sin embargo, pocos caracteres no ASCII no darían los resultados esperados. Es correcto que los usuarios entiendan el uso correcto de este enfoque y se debe usar principalmente para los alfabetos en inglés. –

+0

Creo que debería ser 'c | 0x20' en lugar de 'c^0x20' para minúsculas. De lo contrario, si el personaje ya está en minúsculas, tu código lo convertirá en mayúscula –

2
System.out.println(first.substring(0,1).toUpperCase()); 
System.out.println(last.substring(0,1).toUpperCase()); 
+1

¿Puedes explicar tu respuesta? – soundslikeodd

+0

first.substring (0,1) recuperará la subcadena que está en el índice 0 de la cadena y luego aplicará el método UpCaseCase a esa cadena que le dará el primer carácter en esa cadena como mayúscula –

+1

Edite su respuesta y agregue esta explicación. – soundslikeodd

1

Creo que está intentando sacar provecho primera y la última letra de cada palabra en una oración con espacio como delimitador.

puede hacerse a través StringBuffer:

public static String toFirstLastCharUpperAll(String string){ 
    StringBuffer sb=new StringBuffer(string); 
     for(int i=0;i<sb.length();i++) 
      if(i==0 || sb.charAt(i-1)==' ' //for first character of string/each word 
       || i==sb.length()-1 || sb.charAt(i+1)==' ') //for last character of string/each word 
       sb.setCharAt(i, Character.toUpperCase(sb.charAt(i))); 
    return sb.toString(); 
}