Вопрос по c#, string – Как проверить, содержит ли строка единственный вхождение подстроки?

5

У меня есть это:

string strings = "a b c d d e";

И мне нужно что-то похожее наstring.Contains(), но мне нужно знать не толькоприсутствует ли строка(в случае выше буквы), но такжеесли он присутствует только один раз.

Как мне этого добиться?

возможный дубликатНайти наибольшее вхождение символа в строку C #? MethodMan
почему бы не использовать простой оператор Linq для возврата символа, который встречается чаще всего, вы можете использоватьGroupBy а такжеOrderDescending MethodMan
Я не думаю, что это обман. Colonel Panic

Ваш Ответ

6   ответов
0

как показано ниже ... это поможет вам ...

string strings = "a b c d d e";
string text ="a";
int count = 0;
int i = 0;
while ((i = strings.IndexOf(text, i)) != -1)
{
    i += text.Length;
    count++;
}
if(count == 0)
Console.WriteLine("String not Present");

if(count == 1)
Console.WriteLine("String Occured Only one time");

if(Count>1)
Console.WriteLine("String Occurance : " + count.Tostring());
Вы, кажется, путаетеstrings а такжеtext переменные. Например, когда вы говоритеtext.IndexOf(text, i), Обратите внимание, что было бы интересно узнать, существует ли строка поиска в виде двух подстрок, которые перекрываются. Например, если мы искали подстроку"reassure" внутри"XXXXXreassureassureXX"можно было бы посчитать два совпадения (непонятно в вопросе). Так что смотрите, сколько вы увеличиваетеi, Также смотрите приращениеi потому что, если вы выходите за пределыstrings переменная, следующаяIndexOf бросит исключение, а не просто вернуть-1. Jeppe Stig Nielsen
@JeppeStigNielsen: извиняюсь ... я отредактировал свои коды .. Pandian
Сначала попробуйте свой собственный код сstrings = "a b c d d e" а такжеtext = "e", После исправления этой проблемы попробуйте выполнить код сstrings = "XXXXXreassureassureXX" а такжеtext = "reassure", Какой ответ вы предпочитаете в этом случае? Jeppe Stig Nielsen
0

Еще одна простая альтернатива:

if(strings.Split(new [] { "a" }, StringSplitOptions.None).Length == 2)
0
    string source = "a b c d d e";
    string search = "d";
    int i = source.IndexOf(search, 0);
    int j = source.IndexOf(search, i + search.Length);
    if (i == -1)
        Console.WriteLine("No match");
    else if (j == -1)
        Console.WriteLine("One match");   
    else
        Console.WriteLine("More match");
5

Вы могли бы использовать LINQ

int count = strings.Count(f => f == 'd');
Bit Destroyer - правда, я пропустил это Andrew Beal
Это работает только для персонажей. Он упомянул, что хочет найти всю строку в исходной строке. jamesmillerio
-1 Андрей это хорошо но условие не должно быть жестко закодировано MethodMan
1

Альтернатива

if(Regex.Matches(input,Regex.Escape(pattern)).Count==1)
14

LastIndexOf(String) а такжеIndexOf(String) и убедитесь, что возвращаемые значения равны. Конечно, также проверьте, найдена ли строка вообще (т.е. возвращаемое значение не -1).

@JeppeStigNielsen исправил спасибо. Ivaylo Strandjev
Вы просто победили меня в этом! marco-fiset
На самом деле, последний простоIndexOf(String), нет "Первый". Jeppe Stig Nielsen

Похожие вопросы