1

入力文字列に 3 つの文字列のいずれかが含まれているかどうかを確認し、後で使用したいと考えています。これが私がこれまでに持っているものです:

// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";

// the array values represent 3 possible variations that I might encounter
string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};

if(sArray.Any(titleID.Contains))
{
      TakeEndPeriod = titleID.Substring(titleID.LastIndexOf(string));
}

配列のどの文字列に含まれているメソッドが見つかったかを確認し、LastIndexOf メソッドでその文字列を正確に使用したいと考えています。私はここで正しい軌道に乗っていますか?

編集:

ここで混乱して申し訳ありません。titleID.LastIndexOf(string) <- 文字列は単なるダミーであり、ここで達成したいことを表しています。以前は、Contains メソッドを使用して値の 1 つだけをチェックしていました。if(titleID.Contains"ended ") の場合、titleID.LastIndexOf("ended ") を実行します。LastIndexOf メソッドでそれぞれを使用して、「終了」、「終了」、または「終了」に基づいて 3 つの個別のブロックを作成できますが、入力に対してよりシンプルで柔軟にしたいと考えています。そうしないと、3 倍のコードが必要になります。私はそれを避けたいと思います。

編集 NR 2:

System.Linq を使用できない場合、どうすれば同じ結果を得ることができますか? ここで提供されるソリューションは、IDE でテストすると機能しますが、このコードを使用するソフトウェア自体では、「System.Linq を使用して」と宣言する可能性がありません。System.Linq.Enumerable.FirstOrDefault のようなものが必要だと考えています。

4

2 に答える 2

0

これでうまくいくはずです。

// this is just an example of 1 out of 3 possible variations
string titleID = "document for the period ended 31 March 2014";

string s1 = "ended ";
string s2 = "Ended ";
string s3 = "Ending ";
string[] sArray = new [] { s1, s2, s3};

var maxLastIndex = -2; 
foreach(var s in sArray)
{
    var lastIndex = titleID.LastIndexOf(s);
    if(lastIndex > maxLastIndex)
        maxLastIndex = lastIndex;
}

/// if maxLastIndex is still -1 it means no matching elements exist in the string.
于 2014-06-26T07:46:51.757 に答える