Warum ist der Großbuchstabe größer als ein kleiner Buchstabe in .Net?

8

In Java:

%Vor%

Verwenden Sie in .Net String.CompareTo:

%Vor%

Verwenden Sie in .Net Char.CompareTo:

%Vor%

Ich weiß, dass Java Zeichenketten anhand seiner Position in der Unicode-Tabelle vergleicht, aber .NET nicht. Wie bestimmt, welcher Großbuchstabe größer ist als ein kleiner Buchstabe in .Net?

String.CompareTo-Methode (String)

    
smartleos 28.06.2013, 06:21
quelle

4 Antworten

3

Das doc, das ich finden konnte , sagt:

  

Diese Methode führt einen wortweisen (case-sensitive und culture-sensitive) Vergleich unter Verwendung der aktuellen Kultur durch.

Also ist es nicht ganz dasselbe wie Java's .compareTo() , das standardmäßig einen lexikographischen Vergleich durchführt, mit Unicode-Codepunkten, wie Sie sagen.

Daher hängt es in .NET von Ihrer aktuellen "Kultur" ab (Java würde dies ein "Gebietsschema" nennen, denke ich).

Wenn Sie in .NET den String-Vergleich "à la Java" durchführen wollen, müssen Sie String.CompareOrdinal() statt.

Wenn Sie im Gegensatz dazu einen lokalisierungsabhängigen Zeichenfolgenvergleich in Java durchführen möchten, müssen Sie ein Collator .

Schließlich ein weiterer Link auf MSDN zeigt den Einfluss von Kulturen auf Vergleiche und sogar Zeichengleichheit.

    
fge 28.06.2013, 06:34
quelle
2

Von Java String

  

Rückgabe:   der Wert 0, wenn die Argument-Zeichenkette dieser Zeichenkette entspricht; ein Wert kleiner als 0, wenn dieser String lexikographisch kleiner als das String-Argument ist; und ein Wert größer als 0, wenn diese Zeichenfolge lexikografisch größer ist als das Zeichenfolgenargument.

Von .Net String.CompareTo

  

Diese Methode führt ein Wort aus (Groß- / Kleinschreibung und kultursensitiv)   Vergleich mit der aktuellen Kultur. Für mehr Informationen über das Wort,   String- und Ordnungssortierungen finden Sie unter System.Globalization.CompareOptions .

>

In diesem Beitrag wird der Unterschied zwischen den Vergleichsarten

Und das Dokument erklärt den Unterschied zwischen allen Vergleichstypen;

Wenn Sie diese beiden betrachten, CurrentCulture und Ordinal

%Vor%

Ordinal ist die einzige, wo "i" > "I" und daher Java wie

    
Java Devil 28.06.2013 06:36
quelle
-1

Dies liegt an der Reihenfolge der Zeichen im ASCII-Zeichensatz. Dies ist etwas, was Sie wirklich verstehen sollten, wenn Sie in Ihren Programmen irgendeine Art von Datenmanipulation durchführen.

Ich bin mir nicht sicher, ob das Grid-Steuerelement über Eigenschaften verfügt, mit denen Sie die Sortierreihenfolge ändern können. Andernfalls müssen Sie Ihr eigenes Sortier-Unterprogramm schreiben.

Sie könnten die Funktion std :: sort mit einer benutzerdefinierten Prädikatfunktion verwenden, die alle Kleinbuchstaben vor Großbuchstaben setzt.

    
Manish Doshi 28.06.2013 06:36
quelle
-1

CompareTo gibt einen int-Wert zurück. Dieser Int zeigt das Ergebnis einer Vergleichsoperation an. Eine negative 1 zeigt an, dass der erste Wert kleiner ist. Eine positive 1 zeigt an, dass der erste Wert größer ist. Und eine Null gibt an, dass die beiden Werte gleich sind.

Vergleichen Sie die Ergebnisse

  

5.CompareTo (6) = -1 Erster int ist kleiner.

     

6.CompareTo (5) = 1 Erster int ist größer.

     

5.CompareTo (5) = 0 Ints sind gleich.

Wenn Sie versuchen:

%Vor%

In String Code Änderungen und Ergebnis ist anders als compareTo on String von 9 und 10 sagt Ihnen 9 ist größer:

%Vor%

Während in Java:

Es vergleicht den Code für Zeichen.

Bild http://www.asciitable.com/index/asciifull.gif

A ist 65 und 'Z' ist 90, während a = 97 und z = 122, also Kein Großbuchstabe ist größer als kleine Zeichen

SO A-a ist 97-65 = 32

    
Zaheer Ahmed 28.06.2013 06:45
quelle

Tags und Links