2013-12-01 4 views
1

Я пытаюсь манипулировать строкой с помощью C#/бритвы.Строка содержит (второй экземпляр подстроки)

Что я хочу сделать, это показать только часть строки справа от второго появления слова «Сводка». Так, например, если строка:

Резюме Симптомы Подробнее Резюме а лапки коалиция является мостом кости, которая образует в ноге в конце подросткового возраста. Как преплюсневая коалиция прогрессирует из волокнистых ...

Я хочу, чтобы отобразить его как:

лапок коалиции является мостом кости, которая образует в ноге в конце подросткового возраста. Поскольку тарзальная коалиция развивается из волокнистого ...

Итак, я думаю, что мне нужно знать, как вы используете «содержит», чтобы найти второй экземпляр подстроки внутри строки?

КИ ... так 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

У вас нет. Вы используете 'String.IndexOf' –

+0

Содержит будет только указать, содержит ли строка строку, которую вы ищете. Итак, вы этого не сделаете. – PhoenixReborn

+0

Что касается ошибки при попытке вывода вашего результата - какая ошибка (компиляция или время выполнения) и каково точное сообщение об ошибке? – Grx70

ответ

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.IndexOf и String.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.

+0

Что делать, если после второго появления будет присутствовать другое 'Summary'? –

+0

@ Илья Иванова ждут его. –

+0

Привет, спасибо за быстрый ответ! Никогда не будет третьего появления слова «Сводка», так что это должно быть хорошо, я думаю. Мне интересно, как бы я вывел значение массива «встроенный», а не в консоль? Я спрашиваю, потому что это не работает: @ { строка s = @ Html.Raw (item.ShortBody); var array = s.Split (новая строка [] {"Summary"}, StringSplitOptions.RemoveEmptyEntries); @array [1] – embryo

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(); 
+0

+1 второй случай - самый привлекательный. Кроме того, хотя об использовании 'IndexOf' дважды - это кажется более надежным и коротким, чтобы сравниться с' Split' и 'Join' –

Смежные вопросы