- PR -

string#IndexOfメソッドの動作に関して

1
投稿者投稿内容
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2004-12-28 10:12
こんにちは、こんどると申します。

C#のStringクラスのIndexOfメソッドに関する質問です。
文字列中に改行コード"\\r\\n"が含まれているかを判定したいのですが
文字列が以下の"str1"のようなものだと正常に"true"と判定されるのですが
"str2"のパターンだと"false"と判定されてしまいます。
改行コード直後に「゛」文字があるのが原因だと思うのですが
理由及び解決方法が思いつきません。
どなたか同じような問題に当たった方や、解決方法を思いつく方いらっしゃいましたら
ご教授お願いします。

string str1 = @"abc
xyz";
string str2 = @"abc
゛xyz";

if(str1.IndexOf("\\r\\n") >= 0)
{
MessageBox.Show("true");// str1の場合こちらに入ります
}
else
{
MessageBox.Show("false");// str2の場合こちらに入ります
}
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2004-12-28 10:25

こんどるです。

理由は依然わかりませんがとりあえず解決方法として
IndexOfのかわりに以下のように1文字ずつチェックするようにしてみました。
以外にもパフォーマンスもIndexOfの倍以上でていい感じではありますが
やはり原因などを知りたいので引き続き宜しくお願いします。

private bool check(string str)
{
bool isResult = false;

if(str != null)
{
bool isCr = false;
for(int i = 0; i < str.Length; i++)
{
if(str[i] == '\r')
{
isCr = true;
}
else if(isCr && str[i] == '\n')
{
isResult = true;
break;
}
else
{
isCr = false;
}
}
}

return isResult;
}
1

スキルアップ/キャリアアップ(JOB@IT)