2017-01-04 6 views
14

文字列を序数の大文字または小文字に変換することは可能ですか?同じような不変量。文字列を序数の大文字または小文字に変換する

string upperInvariant = "ß".ToUpperInvariant(); 
string lowerInvariant = "ß".ToLowerInvariant(); 
bool invariant = upperInvariant == lowerInvariant; // true 

string upperOrdinal = "ß".ToUpperOrdinal(); // SS 
string lowerOrdinal = "ß".ToLowerOrdinal(); // ss 
bool ordinal = upperOrdinal == lowerOrdinal; // false 

ToUpperOrdinalとToLowerOrdinalの実装方法は?

編集: 序数表記の取得方法は?同様に、不変の文字列表現を取得する方法は?おそらく上記の場合と同様に不可能かもしれませんが、少なくとも序数表現についてはあいまいかもしれません。

EDIT2:msdnから

string.Equals("ß", "ss", StringComparison.InvariantCultureIgnoreCase); // true 

しかし

"ß".ToLowerInvariant() == "ss"; // false 
+2

@diiN__________私は拡張メソッドの考えは、OPの助けが必要なものだとは思わない。彼らは、そのようなメソッドのコードがどんなものであるべきかを知りません。 –

+0

私は拡張メソッドや文字列比較については求めていません。順序文字列表現を取得する方法のみ。 – Wouter

+8

序数比較は「各バイトを比較」を意味するため、_respresentation_という序数文字列はありません。 –

答えて

1

:OrdinalIgnoreCaseプロパティによって返さ

TheStringComparerは、彼らがに変換したかのように比較するために、文字列内の文字を扱います不変の文化の規則を使用して大文字に変換し、単純なバイト比較を実行しますisonは言語に依存しません。

しかし、私は単にあなたに「SS」にordinally equivallentある文字列を与えることはありません「ß」.ToUpperInvariantを()やっているので、あなたが望むものを達成しないことをやって推測しています。 Why “ss” equals 'ß'という特殊なケースを扱うString.Equalsメソッドには、いくつかの魔法が必要です。

ドイツ語のテキストのみを心配している場合は、this answer might helpです。

+0

特にドイツ語ではありません。しかしそれは単なる例です。 – Wouter

1

この機能は.NET Frameworkまたは.NET Coreには存在しません。最も近いのはstring.Normalize()ですが、これを正常に終了するために必要な大文字と小文字のオプションはありません。

この機能は、ICU project(C/Javaで利用可能)にあります。あなたの後の機能は、Cのunorm2.hファイルまたはJavaのNormalizer2クラスです。 Example usage in Javaおよびrelated test

icu.netプロジェクトでCライブラリをラップすることによって、ICU機能を.NETに移植する作業があることに注意してください。今、there is no Normalizer2 classですが、実装するのに多大な労力を要するとは思いません。

+0

Thanx、これに加えて、msdnの赤は何ですか?Normalizeは大文字と小文字を変更しません。多くの同等のバイナリ表現を正規化します。私は、ユニコード00dfと1e9eが関連していることも発見しました。しかし何とか1e9eは00dfの大文字ではありません。参照:http://www.fileformat.info/info/unicode/char/00df/index.htmおよびhttp://www.fileformat.info/info/unicode/char/1e9e/index.htm。 – Wouter

+0

はい、私はそれが私の答えでは全く同じではないと言いました。このように動作させるには、ICU unorm2.hを呼び出す必要があります。 Java Normalizer2クラスの後にAPIをモデル化し、それをicu.netプロジェクトにドロップすると、誰にでも利用できるようになるのが最善です。 – NightOwl888

関連する問題