Konvertieren eines Zeichens in Großbuchstaben


75
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);

Wie würde ich die F- und L-Variablen in Großbuchstaben konvertieren lassen?


Welchen Teil der Antworten auf Ihre vorherige Frage haben Sie nicht verstanden? Meine Antwort dort enthält eine Antwort auf diese Frage.
Bozho

@shep - Kannst du die Antwort von BalusC akzeptieren? Es wird zukünftigen Suchenden helfen.
AjahnCharles

Antworten:


142

Sie können Character#toUpperCase()dies verwenden.

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

Es gibt jedoch einige Einschränkungen, da der Welt viel mehr Zeichen bekannt sind, als jemals in den 16-Bit- charBereich passen können. Siehe auch folgenden Auszug aus dem Javadoc :

Hinweis: Diese Methode kann keine zusätzlichen Zeichen verarbeiten . Verwenden Sie die toUpperCase(int)Methode, um alle Unicode-Zeichen, einschließlich zusätzlicher Zeichen, zu unterstützen .


32

Anstatt vorhandene Dienstprogramme zu verwenden, können Sie die folgende Konvertierung mithilfe einer booleschen Operation versuchen:

In Großbuchstaben:

 char upperChar = 'l' & 0x5f

Kleinbuchstaben:

   char lowerChar = 'L' ^ 0x20

Wie es funktioniert:

Binär-, Hex- und Dezimaltabelle:

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

Nehmen wir ein Beispiel für Small lto LConversion:

Die binäre UND-Verknüpfung: (l & 0x5f)

lZeichen hat ASCII 108 und 01101100ist binäre Repräsentation.

   1101100
&  1011111
-----------
   1001100 = 76 in decimal which is **ASCII** code of L

Ähnlich die Lzur lUmwandlung:

Die binäre XOR-Operation: (L ^ 0x20)

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

11
Ich bin ehrlich schockiert, dass dies 7 Stimmen hat. Während ich den cleveren Ansatz begrüße, führt Cleversein selten zu wartbarem Code, insbesondere wenn er anstelle einer integrierten Methode wie verwendet wird Character.toUpperCase(). Jeder Benutzer sollte verstehen, dass nichts Nicht-ASCII verarbeitet wird.
Adam Hewitt

1
@AdamHewitt Dieser Ansatz funktioniert auch mit Nicht-ASCII-Zeichen, z. B. '250'. Allerdings würden nur wenige Nicht-ASCII-Zeichen keine erwarteten Ergebnisse liefern. Ihr Punkt ist richtig, dass Benutzer die richtige Verwendung dieses Ansatzes verstehen und ihn hauptsächlich verwenden sollten für englische Alphabete.
Rahul Sharma

1
Ich denke, es sollte c | 0x20statt c ^ 0x20für Kleinbuchstaben sein. Andernfalls, wenn das Zeichen bereits in Kleinbuchstaben geschrieben ist, konvertiert Ihr Code es in Großbuchstaben
Steven Yue

18

Schauen Sie sich die java.lang.CharacterKlasse an, sie bietet viele nützliche Methoden zum Konvertieren oder Testen von Zeichen.


1
+1 Ich mag die Antworten, die der Benutzer mit einer Referenz
anbietet

2
-1, wenn wir für Studenten ziehen, entfernen wir einen der Hauptvorteile von SO. Verbringen Sie nicht übermäßig viel Zeit damit, verschachtelten Referenzen von Personen über defekte Links hinweg zu folgen.
Ebt


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

1
Können Sie Ihre Antwort erklären?
Soundslikeodd

first.substring (0,1) ruft einen Teilstring ab, der sich im Index 0 der Zeichenfolge befindet, und wendet dann die toCpperCase-Methode auf diese Zeichenfolge an, die Ihnen das erste Zeichen in dieser Zeichenfolge als Großbuchstaben gibt
Likhith Kumar

4

Da Sie wissen, dass die Zeichen in Kleinbuchstaben geschrieben sind, können Sie den entsprechenden ASCII-Wert subtrahieren, um sie in Großbuchstaben zu setzen:

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

Hier ist eine ASCII-Tabelle als Referenz


4
Dies funktioniert nur, wenn die Zeichenfolge ausschließlich aus ASCII-Zeichen besteht. Sprachen wie Französisch, Griechisch, Spanisch, Türkisch usw. haben Nicht-ASCII-Zeichen mit oberen / unteren Formen. Dieser Ansatz würde in diesen Fällen nicht funktionieren ...
Mike Laren

Tatsächlich funktioniert dieser grundlegende Ansatz für die häufigsten Nicht-ASCII-Zeichen in Französisch, Spanisch, Deutsch ... zB é à ö û ñ... Wenn der OP also weiß, dass er sich nur mit solchen Zeichen befassen muss, kann er sich an diese Methode halten der Einfachheit und Leistung halber.
Sébastien

1
Berechnungen mit Zeichen durchzuführen, um den Fall zu ändern, ist eine der schlimmsten Gewohnheiten und daher nicht das 21. Jahrhundert! Es gibt mehr als ASCII-Zeichen!
Floyd

2

Wenn Sie das Apache Commons Lang Jar in Ihr Projekt aufnehmen, ist die einfachste Lösung:

WordUtils.capitalize(Name)

kümmert sich um die ganze Drecksarbeit für Sie. Sehen Sie den Javadoc hier

Alternativ haben Sie auch eine CapitalizeFully (String) -Methode, die auch den Rest der Zeichen in Kleinbuchstaben schreibt.


Der von Ihnen angegebene Link gibt 404 Fehler !!!! kannst du es korrigieren?
Visruth

2

Sie können .toUpperCase () direkt auf String-Variablen oder als Attribut auf Textfelder anwenden. Ex: -

String str;
TextView txt;

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

0

Ich denke, Sie versuchen, das erste und letzte Zeichen jedes Wortes in einem Satz mit einem Leerzeichen als Trennzeichen groß zu schreiben.

Kann durch gemacht werden 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();
}

-1

Die einfachste Lösung für Ihren Fall - ändern Sie die erste Zeile und lassen Sie sie genau das Gegenteil tun:

String lower = Name.toUpperCase ();

Natürlich lohnt es sich auch, den Namen zu ändern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.