Поиск строки в C # немного похож на оператор LIKE в скажем VB - PullRequest
0 голосов
/ 05 декабря 2018

Мне известен этот вопрос как заданный.И я на самом деле не ищу функцию для этого.Я надеялся получить несколько советов по созданию небольшого метода, который я сделал лучше.В основном, возьмите длинную строку и найдите в ней строку поменьше.Я знаю, что буквально всегда есть миллион способов сделать что-то лучше, и именно это привело меня сюда.

Пожалуйста, посмотрите на фрагмент кода и дайте мне знать, что вы думаете.Нет, это не очень сложно, да, это работает для моих нужд, но мне больше интересно узнать, где болевые точки будут использовать это для чего-то, для чего, я предполагаю, это будет работать, но не по той-то и такой-то причине.Я надеюсь, что в этом есть смысл.Но чтобы дать возможность ответить на этот вопрос для SO, это сильный способ выполнить эту задачу (я немного знаю ответ :))

Супер заинтересован в конструктивной критике, а не просто в «это плохо»,Я умоляю вас уточнить эту мысль, чтобы я мог получить максимальную отдачу от ответов.Как всегда, спасибо продвинутым парням.

public static Boolean FindTextInString(string strTextToSearch, string strTextToLookFor)
{
    //put the string to search into lower case
    string strTextToSearchLower = strTextToSearch.ToLower(); 
    //put the text to look for to lower case
    string strTextToLookForLower = strTextToLookFor.ToLower(); 

    //get the length of both of the strings
    int intTextToLookForLength = strTextToLookForLower.Length; 
    int intTextToSearch = strTextToSearchLower.Length;

    //loop through the division amount so we can check each part of the search text
    for(int i = 0; i < intTextToSearch; i++) 
    {
        //substring at multiple positions and see if it can be found
        if (strTextToSearchLower.Substring(i,intTextToLookForLength) == strTextToLookForLower) 
        {
            //return true if we found a matching string within the search in text
            return true; 
        }
    }

    //otherwise we will return false
    return false; 
}

Ответы [ 3 ]

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

Вы можете повторно использовать оператор Like VB следующим образом:

1) Сделать ссылку на библиотеку Microsoft.VisualBasic.dll.

2) Использовать следующий код.

using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;

if (LikeOperator.LikeString(Source: "11", Pattern: "11*", CompareOption: CompareMethod.Text)
{
    // Your code here...
}
0 голосов
/ 05 декабря 2018

Для реализации вашей функции без учета регистра может быть более целесообразно использовать IndexOf вместо комбинации двух вызовов ToLower() с Contains.Это связано с тем, что ToLower() сгенерирует новую строку, а также из-за турецкой проблемы .

Что-то вроде следующего должно сработать, где возвращается False, если либотермин null, в противном случае используется нечувствительный к регистру вызов IndexOf, чтобы определить, существует ли поисковый термин в исходной строке:

public static bool SourceContainsSearch(string source, string search)
{
    return search != null &&
           source?.IndexOf(search, StringComparison.OrdinalIgnoreCase) > -1;
}
0 голосов
/ 05 декабря 2018

Если вам нужно только найти подстроку внутри строки, просто используйте String.Contains()

Пример:

string string_to_search = "the cat jumped onto the table";
string string_to_find = "jumped onto";

return string_to_search.ToLower().Contains(string_to_find.ToLower());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...