как проверить все условия в строке - PullRequest
2 голосов
/ 23 сентября 2010

Я хочу проверить много вещей в строке, как я хочу проверить 35-кратный различный индекс difnet в строке, как

string = "i  am steven"

Я хочу проверить, есть ли у этой строки я или я, Стивен и что-то еще. если я использую indexof для этого, этот код выглядит ужасно, как я могу применить весь индекс для строки.

Ответы [ 6 ]

1 голос
/ 23 сентября 2010

вы можете разбить его на слова по string.Split или Regex.Split (для сложных случаев), а затем построить словарь word-> index *. тогда ваши чеки будут намного быстрее.

* - для длинных предложений word-> список индексов.

0 голосов
/ 23 сентября 2010

Я не понимаю, чего ты хочешь. Надеюсь, ты хочешь разбить строку или найти индексное положение как это

<pre>

string s = "Я Стивен"; int indexofSinSteven = s.IndexOf ("S"); строка s1 = s.Substring (0, indexofSinSteven); Console.Write (s1);

0 голосов
/ 23 сентября 2010

Ответы до сих пор подразумевают, что вы ищете слов , но из вашего вопроса я понимаю, что вы ищете для проверки на возможные сложные условия. Если вы хотите проверить простые точные совпадения, используйте массив строк для хранения ваших условий, а затем переберите массив, используя IndexOf. Например ...

        string[] myTests = { "I", "am", "Steven", "King" };
        string data = "I am Steven";

        Dictionary<int, int> testResults = new Dictionary<int,int>();
        for (int idx = 0; idx < myTests.Length; ++idx)
        {
            int strIndex = data.IndexOf(myTests[idx], StringComparison.InvariantCultureIgnoreCase);
            testResults[idx] = strIndex;
        }
        // Each test index in the results dictionary that is >= 0 is a match, -1 is a failed match

Но если у вас сложные требования, вы можете рассмотреть возможность использования регулярных выражений. Вот одна из идей, но без четкого понимания того, что вы пытаетесь достичь, она может быть вам не подходит.

        //Regex example
        string pattern = @"(I|am|Steven)(?<=\b\w+\b)";
        string data2 = "I am Steven";
        MatchCollection mx = Regex.Matches(data2, pattern);
        foreach (Match m in mx)
        {
            Console.WriteLine("{0} {1} {2}", m.Value, m.Index, m.Length);
        }
        string negativePattern = @"^.*(?!King).*$";
        MatchCollection mx2 = Regex.Matches(data2, negativePattern);
        if (mx2.Count != 1)
            Console.WriteLine("Contains a negative match.");
0 голосов
/ 23 сентября 2010

Мой подход - разделить части вашей строки и поместить их в Hashtable.После этого поиск будет элегантным и не слишком эффективным.

0 голосов
/ 23 сентября 2010

Вы можете проанализировать ваш ввод "i am steven" в массив строк: ["i", "am", "steven"], а затем проверить, все ли требуемые строки находятся в этом массиве.

0 голосов
/ 23 сентября 2010

Я не уверен, что вы на самом деле хотите, в идеале я хотел бы разбить это на массив слов, а затем вместо этого перебрать их, может быть, даже словарь / список и проверить, не существует ли он ранее /содержит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...