循环遍历字符串以查找子字符串

时间:2011-01-19 03:39:57

标签: c# string

我有这个字符串:

text = "book//title//page/section/para";

我想通过它来查找所有//和/及其索引。

我试着这样做:

if (text.Contains("//"))
{
    Console.WriteLine(" // index:  {0}  ", text.IndexOf("//"));   
}
if (text.Contains("/"))
{
    Console.WriteLine("/ index:  {0}  :", text.IndexOf("/"));    
}

我也在考虑使用:

Foreach(char c in text)

但由于//不是单个字符,因此无效。

我如何实现我的目标?

我也尝试了这个,但没有显示结果

string input = "book//title//page/section/para"; 
string pattern = @"\/\//";


Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches(input);
 if (matches.Count > 0)
  {
      Console.WriteLine("{0} ({1} matches):", input, matches.Count);
      foreach (Match match in matches)
         Console.WriteLine("   " + input.IndexOf(match.Value));
 }

提前谢谢。

5 个答案:

答案 0 :(得分:8)

简单:

var text = "book//title//page/section/para";
foreach (Match m in Regex.Matches(text, "//?"))
    Console.WriteLine(string.Format("Found {0} at index {1}.", m.Value, m.Index));

输出:

Found // at index 4.
Found // at index 11.
Found / at index 17.
Found / at index 25.

答案 1 :(得分:3)

是否可以使用Split?

所以:

string[] words = text.Split(@'/');

然后仔细阅读?由于//,你会有空白,但这可能是可能的吗?

答案 2 :(得分:2)

如果你想要的是一个列表“book”,“title”,“page”,“section”,“para” 你可以使用拆分。

    string text = "book//title//page/section/para";
    string[] delimiters = { "//", "/" };

    string[] result = text.Split(delimiters,StringSplitOptions.RemoveEmptyEntries);
    System.Diagnostics.Debug.WriteLine(result);
    Assert.IsTrue(result[0].isEqual("book"));
    Assert.IsTrue(result[1].isEqual("title"));
    Assert.IsTrue(result[2].isEqual("page"));
    Assert.IsTrue(result[3].isEqual("section"));
    Assert.IsTrue(result[4].isEqual("para"));

答案 3 :(得分:1)

Sometin喜欢:

bool lastCharASlash = false;
foreach(char c in text)
{
    if(c == @'/')
    {
      if(lastCharASlash)
      { 

          // my code...
      }
      lastCharASlash = true;
    }
    else lastCharASlash = false;
}

您也可以text.Split(@"//")

答案 4 :(得分:-2)

您可以用自己的单词替换//和/,然后找到

的最后一个索引
string s = "book//title//page/section/para";

        s = s.Replace("//", "DOUBLE");
        s = s.Replace("/", "SINGLE");

        IList<int> doubleIndex = new List<int>();

        while (s.Contains("DOUBLE"))
        {
            int index = s.IndexOf("DOUBLE");
            s = s.Remove(index, 6);
            s = s.Insert(index, "//");
            doubleIndex.Add(index);
        }

        IList<int> singleIndex = new List<int>();

        while (s.Contains("SINGLE"))
        {
            int index = s.IndexOf("SINGLE");
            s = s.Remove(index, 6);
            s = s.Insert(index, "/");
            singleIndex.Add(index);
        }

请记住首先替换double,否则您将获得//而不是DOUBLE的SINGLESINGLE。希望这会有所帮助。