C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

String.IndexOfのカルチャによる影響


(過去ログ 2 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■1541 / inTopicNo.1)  String.IndexOfのカルチャによる影響
  
□投稿者/ 古橋 伍長(12回)-(2005/10/11(Tue) 13:55:34)

分類:[C#] 


分類:[C#] 

String.Compareによる文字列の並べ替えで
カルチャに依存する事はわかりますが、
String.IndexOfのように一致かどうかだけを
使用するメソッドでカルチャがどう影響するか
わかりません。

特にカルチャが日本の場合どうなりますか?
具体的な例があれば教えて下さい。

また、String.IndexOf等CultureInfoを
パラメータとして指定できない場合、
カルチャ依存させない方法はありますか?

よろしくお願いします。

0
引用返信 編集キー/
■1542 / inTopicNo.2)  Re[1]: String.IndexOfのカルチャによる影響
□投稿者/ まどか 伍長(13回)-(2005/10/11(Tue) 15:28:11)

分類:[C#] 

> String.IndexOfのように一致かどうかだけを
> 使用するメソッドでカルチャがどう影響するか
> わかりません。

String.IndexOfのオーバーロード一覧を見ると、
引数がCharの場合、Unicode値の比較
引数がStringの場合、カルチャによる検索
と書いてあります。

0
引用返信 編集キー/
■1545 / inTopicNo.3)  Re[2]: String.IndexOfのカルチャによる影響
□投稿者/ 古橋 伍長(13回)-(2005/10/11(Tue) 16:35:27)

分類:[C#] 

>
> String.IndexOfのオーバーロード一覧を見ると、
> 引数がCharの場合、Unicode値の比較
> 引数がStringの場合、カルチャによる検索
> と書いてあります。
確かにそう書いてあります。
CompareInfo.IndexOf メソッド (String, Char)には
char を検索する String.IndexOf のオーバーロードは、番号順検索を実行します。
文字列を検索するオーバーロードは、カルチャを考慮した検索を実行します。
と書いてあります。
 私が知りたいのは、引数がStringの場合のカルチャによる検索とは
実際どういうことが起きるのか(または起きないのか)ということです。
例えば、カルチャが日本ならば
"ここのつ"と"きゅう"が同じとみなされるとか(極端ですが)です。

本当は日本の場合、何も起きないことを期待しているんですが、
はっきりしたことが知りたいのです。

0
引用返信 編集キー/
■1546 / inTopicNo.4)  Re[3]: String.IndexOfのカルチャによる影響
□投稿者/ まどか 軍曹(15回)-(2005/10/11(Tue) 16:58:33)

分類:[C#] 

>  私が知りたいのは、引数がStringの場合のカルチャによる検索とは
> 実際どういうことが起きるのか(または起きないのか)ということです。

並べ替えに関しては、漢字が音読み順ではなく部首画数順になったりとか。。。>試してない
検索に関してはヘルプの「固有カルチャのデータの比較と並べ替え」の「文字列の検索」に書いてありました。
日本語で、そこに書いてある例のようなことは無いと思いますが。
#鰍ニ(株)が一致したりして。。。(ほんとだったら怖い

0
引用返信 編集キー/
■1547 / inTopicNo.5)  Re[3]: String.IndexOfのカルチャによる影響
□投稿者/ 魔界の仮面弁士 准尉(28回)-(2005/10/11(Tue) 19:16:46)

分類:[C#] 

>  私が知りたいのは、引数がStringの場合のカルチャによる検索とは
> 実際どういうことが起きるのか(または起きないのか)ということです。

実際の具体例が欲しい、という意味であれば、当方環境では
下記のような結果が得られました。参考になれば。

using System;
class A {
static void Main() {
String S = @"「タトエハ゛」と「タトエバ」";
Console.WriteLine(S.IndexOf('バ' )); // 12
Console.WriteLine(S.IndexOf("バ" )); // 4
Console.WriteLine(S.IndexOf("ハ゛")); // 4
}
}


0
引用返信 編集キー/
■1548 / inTopicNo.6)  Re[4]: String.IndexOfのカルチャによる影響
□投稿者/ 古橋 伍長(14回)-(2005/10/11(Tue) 19:31:33)

分類:[C#] 

>
> using System;
> class A {
> static void Main() {
> String S = @"「タトエバ」と「タトエバ」";
> Console.WriteLine(S.IndexOf('バ' )); // 12
> Console.WriteLine(S.IndexOf("バ" )); // 4
> Console.WriteLine(S.IndexOf("バ")); // 4
> }
> }

おお!ありがとうございます。
確認できました。

("タトエハ゛" == "タトエバ") は、false
("タトエハ゛".CompareTo("タトエバ") == 0) は、true
でした。

やはり、テキストファイル比較など、
いろいろな場面で通常のメソッドを
使用できないことがありますね。


0
引用返信 編集キー/
■1551 / inTopicNo.7)  Re[5]: String.IndexOfのカルチャによる影響
□投稿者/ 中 博俊 二等兵(1回)-(2005/10/11(Tue) 22:07:22)
中 博俊 さんの Web サイト

分類:[C#] 

カルチャに関してもっと突っ込んで調べたければ、Windows の nlsについて調査するといいです。
テキストファイルの比較などはもちろんStringでの比較なんかをするんではなく、バイナリで比較すべきで、そういう意味ではカルチャは尊重しておいて損はありません。

0
引用返信 編集キー/
■1552 / inTopicNo.8)  Re[6]: String.IndexOfのカルチャによる影響
□投稿者/ 古橋 軍曹(15回)-(2005/10/12(Wed) 10:35:10)

分類:[C#] 

OSの機能(windows nls)ならば
バグも含めてガマンするしかありませんね。

"五〇〇円".CompareTo("五円") == 0 はtrueだった。

String.Replaceも
単語 (大文字/小文字を区別し、カルチャに依存した) 検索を実行して、 oldValue を見つけます。
と書いてありますが、
"俺はハ゛カだ".Replace("バカ", "利口") の結果が"俺はハ゛カだ"のままなので、
カルチャに依存していませんでした。
バグかヘルプの間違いですね。

そこで、自分でカルチャ依存のString.Replaceを作成することを
考えたのですがどう実現したらよいかわかりませんでした。
String.IndexOfで位置が判っても何文字が一致したか判らないから。

"俺はハ゛カだ".Replace("バカ", "利口") の結果が
"俺は利口カだ"になりそうです。


0
引用返信 編集キー/
■1553 / inTopicNo.9)  Re[7]: String.IndexOfのカルチャによる影響
□投稿者/ 魔界の仮面弁士 少尉(30回)-(2005/10/12(Wed) 10:47:49)

分類:[C#] 

2005/10/12(Wed) 14:01:03 編集(投稿者)

> そこで、自分でカルチャ依存のString.Replaceを作成することを

カルチャ依存の置換命令が欲しければ、
 Microsoft.VisualBasic.Strings.Replace()
をどうぞ。:-)
# バイナリ比較にも使えますけれどね。

> "俺はハ゛カだ".Replace("バカ", "利口") の結果が
> "俺は利口カだ"になりそうです。

大正解。VBのReplaceメソッドでも、そのように置換されます。


> "五〇〇円".CompareTo("五円") == 0 はtrueだった。

こんなのもありますよ。これらはすべて 0 (一致) を返します。
  "℃".CompareTo("C゜")
  "●".CompareTo("◎゛")
  "山゛゛あ".CompareTo("山゜あ")

0
引用返信 編集キー/
■1554 / inTopicNo.10)  Re[8]: String.IndexOfのカルチャによる影響
□投稿者/ 中博俊 神(224回)-(2005/10/12(Wed) 12:46:50)
中博俊 さんの Web サイト

分類:[C#] 

>OSの機能(windows nls)ならば
>バグも含めてガマンするしかありませんね。
>"五〇〇円".CompareTo("五円") == 0 はtrueだった。

これバグじゃないのであしからず。

#どうにかしようと鋭意努力中


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -