0

如何使用 for 循环遍历字符串中给定短语的每次迭代?例如,假设我有以下字符串:

嘿,这是一个示例字符串。字符串是字符的集合。

每次出现“is”时,我都想将它后面的三个字符分配给一个新字符串。我知道如何做到这一点,但我试图弄清楚如何使用 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})

然后使用正则表达式查找所有匹配项:Regex.Matches()。这将为is在字符串中找到的每个返回一个匹配项,后跟 3 个字符。每场比赛有两组:

  • 第 0 组:包括 is 和接下来的三个字符
  • 第 1 组:包括下一个字符

    Matches matches = re.Matches("嘿,这是一个示例字符串。字符串是字符的集合。"); StringBuilder sb = new StringBuilder(); foreach(匹配 m 匹配){ sb.Append(m.Groups 1 .Value); }

使用 Regex 比遍历字符串的字符要快得多。如果您在您的正则表达式构造函数中使用RegexOptions.Compiled则更多:Regex Constructor (String, RegexOptions)

于 2012-05-23T01:19:15.437 回答