字符串包含(子字符串的第二个实例)

时间:2013-12-01 19:57:47

标签: c# string substring contains

我正在尝试使用C#/ razor操作字符串。

我想要做的只是在“摘要”一词的第二个外观右侧显示字符串的一部分。 因此,例如,如果字符串是:

  

摘要症状阅读更多摘要t骨联盟是青春期后期在足部形成的骨桥。随着t骨联盟从纤维状进展...

我想将其显示为:

  

t骨联盟是青春期后期在足部形成的骨桥。随着t骨联盟从纤维状进展...

所以,我想我需要知道的是你如何使用“contains”来查找字符串中子字符串的第二个实例?

好的......所以Soner让我朝着正确的方向前进,但是当我尝试这个时,它出错了:

@{

string s = @Html.Raw(item.ShortBody);

int firstindex = s.IndexOf("Summary ");
s = s.Remove(0, 8);
int secondindex = s.IndexOf("Summary ");

var strbody = s.Substring(secondindex + 8);
}

@strbody

如何在我的视图中将操纵的字符串输出到屏幕? @s不起作用..

2 个答案:

答案 0 :(得分:2)

如果您知道该字符串始终以第一个摘要开头,则可以在开始搜索之前使用包含偏移量的IndexOf签名。

 var second = str.IndexOf("Summary", 7);
 var description = str.Substring(second + 8).TrimStart();

或者,您可以找到第一个,然后使用它的位置来找到正确的偏移量

 var second = str.IndexOf("Summary", str.IndexOf("Summary") + 7);
 var description = str.Substring(second + 8).TrimStart();

显然,这两者都依赖于字符串确实包含单词Summary的至少两个实例的事实。如果情况并非如此,那么在尝试查找子字符串之前,您需要检查IndexOf的结果是否等于或大于零。

另一种选择,如果您知道该单词最多出现2次是使用LastIndexOf而不是IndexOf,那么请在此之后使用子字符串。

 var second = str.LastIndexOf("Summary");
 var description = str.Substring(second + 8).TrimStart();

答案 1 :(得分:1)

如果在您的第​​二个Summary之后没有Summary个字词,您可以使用String.Split方法;

string s = "Summary Symptoms Read More Summary A tarsal coalition is a bridge of bone that forms in the foot in late adolescence. As the tarsal coalition progresses from a fibrous...";
var array = s.Split(new string[] {"Summary "}, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(array[1]);

输出将是;

A tarsal coalition is a bridge of bone that forms in the foot in late adolescenc
e. As the tarsal coalition progresses from a fibrous...

这里有 demonstration

如果您在第二个摘要后面有摘要字词,则可以使用String.IndexOfString.SubString等方法;

string s = "Summary Symptoms Read More Summary A tarsal coalition is a bridge of bone that forms in the foot in late adolescence. As the tarsal coalition progresses from a fibrous...";
int firstindex = s.IndexOf("Summary ");
s = s.Remove(firstindex, 8);
int secondindex = s.IndexOf("Summary ");
Console.WriteLine(s.Substring(secondindex + 8));

输出将是;

A tarsal coalition is a bridge of bone that forms in the foot in late adolescenc
e. As the tarsal coalition progresses from a fibrous...

这里有 demonstration