ブログ移転?しました エックスサーバを契約してみたので、 いろいろカスタマイズできそうなWordPressを使って ブログを作ってみました。 https://gametech.vatchlog.com/ 多分こちらでも同じような記事を書いていくと思います。 忍者ブログ

ばちブロ

プログラミングとか徒然を書いていた(過去形)

【C#.NET】文字列から指定した文字の間を抽出する

stringクラスに文字を2つ指定して、その文字の間の文字列を返すメソッドないかな~
って思ってgoogle先生を問いただしていたのですが、どうやら無いようで。

無いなら作ればいい!!

というわけで作ってみました。

今回、作りたいメソッドは、

1.引数に文字2つと原文を渡す
2.原文から2つの文字を検出し、その間にある文字列を返す
3.2つの文字(もしくは片方)が原文から検出されなかった場合、原文を返す

こんな感じ。

例えば、「あいうえおかきくけこさしすせそ」という文字列があり、
1つ目の文字に「あい」、2つ目の文字に「きく」を指定すると、
「うえおか」が返されるようなメソッドですね。

それでは続きからどうぞ。

//2つの文字列の間の文字列を返すメソッド
//引数:1つ目の文字、2つ目の文字、原文

public string GetBetweenStrings(string str1, string str2, string orgStr)
{
int orgLen = orgStr.Length; //原文の文字列の長さ
int str1Len = str1.Length; //str1の長さ

int str1Num = orgStr.IndexOf(str1); //str1が原文のどの位置にあるか

string s = ""; //返す文字列

//例外処理
try
{
s = orgStr.Remove(0, str1Num + str1Len); //原文の初めからstr1のある位置まで削除
int str2Num = s.IndexOf(str2); //str2がsのどの位置にあるか
s = s.Remove(str2Num); //sのstr2のある位置から最後まで削除
}
catch(Exception)
{
return orgStr; //原文を返す
}

return s; //戻り値
}



こんな感じになりました。

指定した文字の前、そして後ろを削除してしまうことで
擬似的にその部分を抜き出すことに成功しています。

ですが、このメソッドにも問題はあります。

まず1つに、検出したい文字が原文に複数個あるとき、自動的に1番初めに
ある文字を検出してしまうため、意図していない部分が
抽出されてしまう恐れがあります。

2つ目に、文字を原文から検出できなかった際に、原文を返すしかないというところ。
この辺はアルゴリズムの変更でどうとでもなる気はしますが。

メソッド名がダサいとか言うなよ!絶対だぞ!!


追記

あれ、int型変数orgLenを宣言したのはいいけど、使ってなくね・・・?

拍手[10回]

PR