Nombre del formato en mayúsculas y minúsculas ¿Ayuda de Java, por favor?
-
11-12-2019 - |
Pregunta
entonces tengo que escribir un código java para:
- Introduzca un nombre
- Nombre del formato en mayúsculas y minúsculas
- Introduzca el segundo nombre
- Nombre del formato en mayúsculas y minúsculas
- Mostrarlos en orden alfabético
Sé que la clase Java Character tiene los métodos isLowerCase(), isUpperCase, toLowerCase() y toUpperCase(), que puedes usar para revisar una cadena, carácter por carácter.Si el primer carácter está en minúscula, conviértalo a mayúscula y, para cada carácter siguiente, si el carácter está en mayúscula, conviértalo a minúscula.
La pregunta es ¿cómo reviso cada letra?¿Qué tipo de variables y cadenas debería contener?¿puedes ayudar por favor?
Solución
Debe usar StringBuilder
, cuando se ocupe de la manipulación de cadena. De esta manera, terminas creando un número menor de objetos.
StringBuilder s1 = new StringBuilder("rohit");
StringBuilder s2 = new StringBuilder("jain");
s1.replace(0, s1.length(), s1.toString().toLowerCase());
s2.replace(0, s2.length(), s2.toString().toLowerCase());
s1.setCharAt(0, Character.toTitleCase(s1.charAt(0)));
s2.setCharAt(0, Character.toTitleCase(s2.charAt(0)));
if (s1.toString().compareTo(s2.toString()) >= 0) {
System.out.println(s2 + " " + s1);
} else {
System.out.println(s1 + " " + s2);
}
Otros consejos
Puede convertir el primer carácter en mayúsculas, y luego en minúscula el resto de la cadena:
String name = "jOhN";
name = name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
System.out.println(name); // John
Para atravesar cadenas usando solo la clase String, repita cada carácter de una cadena.
String s = "tester";
int size = s.length(); // length() is the number of characters in the string
for( int i = 0; i < size; i++) {
// s.charAt(i) gets the character at the ith code point.
}
Esta pregunta responde cómo "cambiar" una cadena; no puedes.Sin embargo, la clase StringBuilder proporciona métodos convenientes para editar caracteres en índices específicos.
Parece que desea asegurarse de que todos los nombres estén correctamente escritos en mayúscula, por ejemplo:"martin ye" -> "Martin Ye", en cuyo caso querrás recorrer la entrada de Cadena para asegurarte de que el primer carácter de la Cadena y los caracteres después de un espacio estén en mayúscula.
Para alfabetizar una Lista, sugiero almacenar todos los nombres ingresados en una ArrayList o algún otro objeto de Colecciones, crear un Comparador que implemente Comparador y pasarlo a Collections.sort()...ver esta pregunta en Comparable vs Comparador.
Esto debería arreglarlo
List<String> nameList = new ArrayList<String>();
nameList.add(titleCase("john smith"));
nameList.add(titleCase("tom cruise"));
nameList.add(titleCase("johnsmith"));
Collections.sort(nameList);
for (String name : nameList) {
System.out.println("name=" + name);
}
public static String titleCase(String realName) {
String space = " ";
String[] names = realName.split(space);
StringBuilder b = new StringBuilder();
for (String name : names) {
if (name == null || name.isEmpty()) {
b.append(space);
continue;
}
b.append(name.substring(0, 1).toUpperCase())
.append(name.substring(1).toLowerCase())
.append(space);
}
return b.toString();
}
String
tiene un método toCharArray
que devuelve un recién asignado char[]
de sus personajes.Recuerda que mientras String
somos inmutable, los elementos de las matrices se pueden reasignar.
Similarmente, String
tiene un constructor eso toma un char[]
representando a los personajes de la recién creada String
.
Entonces, al combinarlos, tienes una forma de llegar desde un String
a un char[]
, modificar el char[]
, y de vuelta a una nueva String
.
Esto se puede lograr de varias maneras, la mayoría de las cuales se reducirán a los detalles de los requisitos.
Pero la premisa básica es la misma. String
es inmutable (su contenido no se puede cambiar), por lo que es necesario extraer los caracteres del String
, convierta el primer carácter a mayúscula y reconstituya un nuevo String
desde el char
formación.
Como ya se ha señalado, esto es relativamente sencillo.
La otra cosa que quizás deba hacer es manejar varios nombres (nombre, apellido) en una sola pasada.Nuevamente, esto es relativamente simple.La parte difícil es cuando es posible que necesites dividir una cadena en múltiples condiciones, entonces tendrás que recurrir a una expresión regular.
He aquí un ejemplo muy sencillo.
String name = "this is a test";
String[] parts = name.split(" ");
StringBuilder sb = new StringBuilder(64);
for (String part : parts) {
char[] chars = part.toLowerCase().toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
sb.append(new String(chars)).append(" ");
}
name = sb.toString().trim();
System.out.println(name);