Поиск всего слова с определенной буквой в строке - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно выяснить, как вывести все слова, которые содержат "a".У меня есть string со всеми месяцами и я хочу вывести те, которые содержат "a" в консоль .Вот что у меня есть

string[] Månedsdage = { 
  "Januar", "Februar", "Marts", 
  "April", "Maj", "Juni", 
  "juli", "August", "September", 
  "Oktober", "November", "December", 
  "Bichat" };

for (int i = 0; i < Månedsdage.Length; i++)
{
    for (int j = 0; j < Månedsdage[i].Length; j++)
    {
        if (Månedsdage[i].Substring(j,1) == "a")
        {
            Console.WriteLine("Alle måneder med A: ");
            Console.WriteLine(Månedsdage[j]);
            Console.ReadLine();
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

К сожалению, Contains не принимает StringComparison, но IndexOf делает: мы можем попробовать отфильтровать эти word s, где "a" th-индекс не отрицательный (то есть "a" появляется в word)

    string[] Månedsdage = { 
      "Januar", "Februar", "Marts", 
      "April", "Maj", "Juni", 
      "juli", "August", "September", 
      "Oktober", "November", "December", 
      "Bichat" };

    // StringComparison.CurrentCulture if you want case sensitive search
    var result = Månedsdage
      .Where(word => word.IndexOf("a", StringComparison.CurrentCultureIgnoreCase) >= 0);

    Console.Write(string.Join(Environment.NewLine, result));

Выход:

Januar
Februar
Marts
April
Maj
August
Bichat
0 голосов
/ 11 декабря 2018

Вот пример, который не использует Linq.

Вам нужно использовать только один цикл и IndexOf, чтобы достичь того, что вы ищете:

string[] Månedsdage = { 
  "Januar", "Februar", "Marts", 
  "April", "Maj", "Juni", 
  "juli", "August", "September", 
  "Oktober", "November", "December", 
  "Bichat" };

for (int i = 0; i < Månedsdage.Length; i++)
{
        // if IndexOf("a") >= 0 then there is a match 
        if (Månedsdage[i].IndexOf("a", StringComparison.CurrentCultureIgnoreCase) > -1)
        {
            Console.WriteLine("Alle måneder med A: ");
            Console.WriteLine(Månedsdage[i]);
        }

}

Если вы не хотите, чтобы "A" соответствовал, удалите StringComparison.CurrentCultureIgnoreCase в IndexOf.

В качестве альтернативы, вы можете использовать ToCharArray() и использовать 2 цикла:

foreach (string word in Månedsdage)
{           
    foreach(char c in word.ToCharArray())
    {
        if (c == 'a' || c == 'A')
        {
            Console.WriteLine("Alle måneder med A: ");
            Console.WriteLine(word);

            // a match has been found, break out of the inner loop and move onto next word
            break;
        }           
    }
}
0 голосов
/ 11 декабря 2018

Как насчет этого

string[] result = Månedsdage.Where(x=> x.ToLower().Contains('a')).ToArray();

.Contains () : Чтобы получить все слова, содержащие букву a, мы использовали строковый метод.Этот метод расширения проверяет, существует ли в данной строке подстрока, переданная в качестве параметра.

Где () : чтобы применить одинаковое условие к каждому элементу из массива строк, мы использовали расширение Linqmethod.

ToLower () : Этот метод используется для ввода всех символов строки в нижнем регистре.Так что он не пропустит «А» и «А».ToLower() будет включать April в результирующий массив.Если вы не хотите, чтобы April был в вашем массиве, не используйте ToLower()

POC: .net Fiddle

Выход:

Januar
Februar
Marts
April  /*ToLower() ;)*/
Maj
August
Bichat
...