0

for ループを使用して、文字列内の特定のフレーズの各反復を実行するにはどうすればよいですか? たとえば、次の文字列があるとします。

ねえ、これは文字列の例です。文字列は文字の集まりです。

そして、「is」があるたびに、その後の 3 文字を新しい文字列に割り当てたいと考えました。私はそれを一度行う方法を理解していますが、同じ単語の複数のインスタンスを通過するために for ループを使用する方法を理解しようとしています。

4

3 に答える 3

2

何らかの理由でforループを使用する必要がある場合は、ja72によって提供されるコードの関連部分を次のように置き換えることができます。

for (int i = 0; i < text.Length; i++)
{
    if (text[i] == 'i' && text[i+1] == 's')
        sb.Append(text.Substring(i + 2, 3));
}

残念ながら、これをコメントとしてここに追加するのに十分な評判がないため、回答として投稿します。

于 2012-05-23T01:24:40.037 に答える
1

これは、あなたの望むことですか?

    static void Main(string[] args)
    {
        string text=@"Hey, this is an example string. A string is a collection of characters.";

        StringBuilder sb=new StringBuilder();
        int i=-1;
        while ((i=text.IndexOf("is", i+1))>=0)
        {
            sb.Append(text.Substring(i+2, 3));
        }
        string result=sb.ToString();
    }


//result " is an a "
于 2012-05-23T00:36:37.967 に答える
0

次のような正規表現を使用できます。

  Regex re = new Regex("(?:is)(.{3})");

この正規表現は is(?:is)を探し、次の 3 文字を取ります(.{3})

次に、正規表現を使用してすべての一致を検索します: Regex.Matches()。これにより、文字列内で見つかったそれぞれに一致する文字が返さisれ、その後に 3 文字が続きます。各試合には 2 つのグループがあります。

  • グループ 0: is と次の 3 文字を含む
  • グループ 1: 次のスレッド文字を含む

    Matches matches = re.Matches("ねえ、これは文字列の例です。文字列は文字のコレクションです。"); StringBuilder sb = new StringBuilder(); foreach (マッチで m にマッチ) { sb.Append(m.Groups 1 .Value); }

正規表現を使用すると、文字列の文字をループするよりもはるかに高速です。正規表現コンストラクターでRegexOptions.Compiledを使用する場合はさらに: Regex Constructor (String, RegexOptions)

于 2012-05-23T01:19:15.437 に答える