我有这个字符串:
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));
}
提前谢谢。
答案 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。希望这会有所帮助。