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?
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.
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.
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
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.
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