QA@IT
«回答へ戻る

回答を投稿

この問題は、カルチャが関係しているのかなと思って調べていたのですが

これはって思ったのは
-------------------------------------------------------
String.Empty == "〇"; → False;
String.Compare( String.Empty, "〇" ); → 0(※)
String.CompareOrdinal( String.Empty, "〇" ); → -1
-------------------------------------------------------
だからIndexOfも・・・

StringクラスのIndexOfメソッドは
CompareInfoのIndexOfメソッドを内部で呼び出しています。
そのメソッドにCompareOptions(列挙体)を指定できるのですが、
そこにCompareOptions.Ordinal指定すると正しく処理されます。

---

CompareInfoクラスを使用するのも一つの手。
その他、代替としては
StringクラスのIndexOfAnyメソッドを使用しても
正しく処理できるかと思います。
-------------------------------------------------------
string maru = "〇";
string target_text = "千代田区丸の内一−Oct−〇〇−";
char[] maru_c = maru.ToCharArray();

target_text.IndexOfAny( maru_c );
-------------------------------------------------------

個人的には正規表現でやるのがスッキリする気がします。
余談ですが、"〇"文字(U+3007)は
"IDEOGRAPHIC NUMBER ZERO"って名前みたいです

---
最後に前に投稿したあいまいな情報は
紛らわしいので修正しておきます。
ご指摘ありがとうございました。

[ メッセージ編集済み 編集者: Milan 編集日時 2005-02-06 00:14 ]

投稿者:Milan

この問題は、カルチャが関係しているのかなと思って調べていたのですが

これはって思ったのは
\-------------------------------------------------------
String.Empty == "〇"; → False;
String.Compare( String.Empty, "〇" ); → 0(※)
String.CompareOrdinal( String.Empty, "〇" ); → -1
\-------------------------------------------------------
だからIndexOfも・・・

StringクラスのIndexOfメソッドは
CompareInfoのIndexOfメソッドを内部で呼び出しています。
そのメソッドにCompareOptions(列挙体)を指定できるのですが、
そこにCompareOptions.Ordinal指定すると正しく処理されます。

\---

CompareInfoクラスを使用するのも一つの手。
その他、代替としては
StringクラスのIndexOfAnyメソッドを使用しても
正しく処理できるかと思います。
\-------------------------------------------------------
string maru = "〇";
string target_text = "千代田区丸の内一−Oct−〇〇−";
char[] maru_c = maru.ToCharArray();

target_text.IndexOfAny( maru_c );
\-------------------------------------------------------

個人的には正規表現でやるのがスッキリする気がします。
余談ですが、"〇"文字(U+3007)は
"IDEOGRAPHIC NUMBER ZERO"って名前みたいです

\---
最後に前に投稿したあいまいな情報は
紛らわしいので修正しておきます。
ご指摘ありがとうございました。

<font size="-1">[ メッセージ編集済み 編集者: Milan 編集日時 2005-02-06 00:14 ]</font>


投稿者:Milan