Nome formato nella cassa del titolo Java Aiuto per favore?
-
11-12-2019 - |
Domanda
Quindi devo scrivere un codice Java su:
- .
- Inserisci un nome
- nome in formato nella cassa del titolo
- Ingresso Secondo nome
- nome in formato nella cassa del titolo
- Visuali in ordine alfabeto
So che la classe del personaggio Java ha i metodi Isowerase (), Isuppercase, Tolowercase () e TOUPPercase (), che è possibile utilizzare nella revisione di una stringa, carattere per personaggio.Se il primo carattere è in minuscolo, convertirlo in maiuscolo e per ogni carattere successivo, se il carattere è maiuscolo, convertirlo in minuscolo.
La domanda è come controllo ogni lettera? Che tipo di variabili e stringhe dovrebbero essere contenute? Puoi aiutare?
Soluzione
Dovresti usare StringBuilder
, quando si tratta con la manipolazione delle stringhe .. In questo modo, si finisce per creare il minor numero di oggetti.
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);
}
. Altri suggerimenti
È possibile convertire il primo carattere in maiuscolo, quindi in minuscolo il resto della stringa:
String name = "jOhN";
name = name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
System.out.println(name); // John
. Per le stringhe di attraversamento utilizzando solo la classe di stringa, iterano attraverso ciascun carattere in una stringa.
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.
}
.
Questa domanda risposte Come "cambiare" una stringa - non puoi. La classe StringBuilder fornisce metodi convenienti per la modifica dei caratteri in indici specifici però.
Sembra che tu voglia assicurarsi che tutti i nomi siano adeguatamente capitalizzati, ad esempio: "Martin Ye" -> "Martin Ye", nel qual caso vorrai attraversare l'input della stringa per assicurarsi che il primo carattere del Stringa e personaggi dopo che uno spazio è capitalizzato.
Per l'elenco di alfabetizzazione di un elenco, suggerisco di memorizzare tutti i nomi immutati a un arrayList o ad un altro oggetto di raccolta, creando un comparatore che implementa il comparatore e che passa a Collections.Sort () ... vedere Questa domanda sul comparatore VS comparatore.
Questo dovrebbe risolverlo
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
ha un metodo toCharArray
che restituisce un char[]
di nuova assegnata dei suoi caratteri.Ricorda che mentre String
s sono immutabile , elementi di array possono essere riassegnati. .
Allo stesso modo, String
ha un costruttore che prende un char[]
che rappresenta i caratteri del String
di nuova creato.
Quindi combinando questi, hai un modo per ottenere da un String
a un char[]
, modificare il char[]
e tornare a un nuovo String
.
Questo può essere raggiunto in qualsiasi numero di modi, la maggior parte dei quali verrà ai dettagli dei requisiti.
Ma la premessa di base è la stessa.String
è immutabile (i contenuti non possono essere modificati), quindi è necessario via per estrarre i caratteri del String
, convertire il primo carattere in maiuscolo e ricostituire un nuovo String
dall'array char
.
Come è già stato sottolineato, questo è relativo semplice.
L'altra cosa che potrebbe essere necessaria, è gestire più nomi (prima, ultima) in un singolo passaggio.Ancora una volta, questo è relativamente semplice.La parte difficile è quando potresti aver bisogno di dividere una stringa su più condizioni, allora dovrai ricorrere a un'espressione regolare.
Ecco un esempio molto semplice.
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);
.