for ループを使用して、文字列内の特定のフレーズの各反復を実行するにはどうすればよいですか? たとえば、次の文字列があるとします。
ねえ、これは文字列の例です。文字列は文字の集まりです。
そして、「is」があるたびに、その後の 3 文字を新しい文字列に割り当てたいと考えました。私はそれを一度行う方法を理解していますが、同じ単語の複数のインスタンスを通過するために for ループを使用する方法を理解しようとしています。
何らかの理由で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));
}
残念ながら、これをコメントとしてここに追加するのに十分な評判がないため、回答として投稿します。
これは、あなたの望むことですか?
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 "
次のような正規表現を使用できます。
Regex re = new Regex("(?:is)(.{3})");
この正規表現は is(?:is)
を探し、次の 3 文字を取ります(.{3})
次に、正規表現を使用してすべての一致を検索します: Regex.Matches()。これにより、文字列内で見つかったそれぞれに一致する文字が返さis
れ、その後に 3 文字が続きます。各試合には 2 つのグループがあります。
グループ 1: 次のスレッド文字を含む
Matches matches = re.Matches("ねえ、これは文字列の例です。文字列は文字のコレクションです。"); StringBuilder sb = new StringBuilder(); foreach (マッチで m にマッチ) { sb.Append(m.Groups 1 .Value); }
正規表現を使用すると、文字列の文字をループするよりもはるかに高速です。正規表現コンストラクターでRegexOptions.Compiledを使用する場合はさらに: Regex Constructor (String, RegexOptions)