2014-10-22 3 views
7

Ich frage mich, warum Character.toUpperCase/toLowerCase hat keine Locale-Parameter wie String.toUpperCase/toLowerCase.Warum Java Character.toUpperCase/toLowerCase keine Locale-Parameter wie String.toUpperCase/toLowerCase hat

Ich habe zuerst Großbuchstaben eines Textes, der in jeder Sprache sein kann. Ich habe 2 Lösungen:

  1. Verwenden Character.toUpperCase

    String text = "stack overflow"; 
    StringBuilder sb = new StringBuilder(text); 
    
    sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); // No Locale parameter here. 
    
    String out = sb.toString(); //Out: Stack overflow 
    
  2. Verwenden String.toUpperCase

    Locale myLocale = new Locale(locateId); 
    
    String text = "stack overflow"; 
    String text1 = text.substring(0,1).toUpperCase(myLocale); 
    String text2 = text.substring(1); 
    
    String out = text1 + text2; // Out: Stack overflow 
    

Für meine Locale. Beides hat das gleiche Ergebnis.

Meine Frage ist:

  • Da der Text in jeder Sprache sein kann. Welchen Weg soll ich benutzen?

  • Warum Character.toUpperCase/toLowerCase keinen Gebietsschema-Parameter hat, da es keinen großen Unterschied zwischen Character.toUpperCase/toLowerCase und String.toUpperCase/toLowerCase gibt, da String ein Array von Zeichen ist.

+1

Beachten Sie, dass das Javadoc vorschlägt, 'String's Version für Gebietsschema-sensitive Zuordnungen zu verwenden. –

Antwort

2

Vom Character#toUpperCase(int) Javadoc, in Großbuchstaben

Im Allgemeinen String.toUpperCase() sollten Zeichen verwendet werden abzubilden. String Fall Mapping-Methoden haben mehrere Vorteile gegenüber Character Fall Mapping-Methoden. String Case-Mapping-Methoden können Gebietsschema-sensitive Zuordnungen, kontextabhängige Zuordnungen und 1: M-Zeichenzuordnungen durchführen, während die Character Fallzuordnungsmethoden dies nicht können. So

, die Antwort ist Ihre Sekunden Beispiel (String.toUpperCase)

+0

schlag mich um 6 Sekunden! – dkatzel

+0

Also sollte ich Character.toUpperCase/toLowerCase nicht verwenden, da mein Text in jeder Sprache sein kann. Vielen Dank! – Loc

+0

Danke !!!!!! – Loc

4

Als Javadoc sagt:

Im Allgemeinen String.toUpperCase() sollte verwendet werden, um Zeichen zu kartieren in Großbuchstaben . String-Case-Mapping-Methoden haben mehrere Vorteile gegenüber Character-Case-Mapping-Methoden. String-Mapping-Methoden können Gebietsschema-abhängige Zuordnungen, kontextabhängige Zuordnungen und 1: M-Zeichenzuordnungen durchführen, während die Zeichenzuordnungsmethoden dies nicht können.

Verwenden Sie also String.toUpperCase()

+0

Danke. Ich wählte! – Loc

1

Wenn die Frage "welche Methode soll ich verwenden", dann ist diese Frage ein Duplikat String conversion to Title Case und die richtige Antwort entweder

Wenn die Frage lautet: „Warum Character nicht über locale-sensitive Fall wechselnden Methoden“, dann ist die einzige Möglichkeit, eine Antwort bekommen wahrscheinlich sind, ist einer der Designer der Sprache Java zu konsultieren. Es ist unwahrscheinlich, dass die Stack Overflow-Community Ihnen die gewünschte Antwort geben kann.

+0

Eigentlich. Ich habe 2 Unterfragen, wie Sie wissen. Welchen Weg - ich habe die Antwort von Elliott Frisch und dkatzel. Andere Frage, warum Character.toUpperCase/toLowerCase keinen Gebietsschema-Parameter hat - ich frage das, weil es vielleicht einen anderen Grund gibt, dass Gebietsschema nicht benötigt wird. – Loc

+0

Ja, diese "andere Frage" ist, was mein letzter Absatz anspricht. Wenn Sie jedoch in Zukunft zwei Fragen haben, sollten Sie zwei Fragen stellen. Es erleichtert das Annehmen einer Antwort, wenn unterschiedliche Antworten für jede Teilfrage "am besten" sind. –

+0

Definitiv Locale wird benötigt, um den Fall eines einzelnen Zeichens zu ändern. Zum Beispiel ist das Ergebnis der Umwandlung von "i" in Großbuchstaben unterschiedlich zwischen Englisch und Türkisch. –

Verwandte Themen