using System; using System.Text; namespace ConsoleApplication1 { class Program { public static void Main(string[] args) { String sSearch = "sdf *asd f adf * \" asdf* * врот мне*ноги*"; Console.WriteLine("Исходная строка: {0}\n", sSearch); Console.WriteLine("Итоговая строка: {0}", SearchCriteria(sSearch, 3)); } /* * Функция подготавливает строку * для использования в запросе * * @param string sSerachString - строка поиска * @param int iParamLimit - лимит параметров * @return string - результирующая строка с критериями поиска */ public static string SearchCriteria(String sSearchString, int iParamLimit) { char[] cTrimChars = {' ', '"', '*'}; // массив недопустимых символов // удалим недопустимые символы из строки for (int i = 1; i < cTrimChars.Length; i++) { sSearchString.Replace(cTrimChars[i], cTrimChars[0]); } sSearchString.Trim(cTrimChars[0]); // удаляем пробелы по краям для корректной разбивки string[] saSearchItems = sSearchString.Split(cTrimChars[0]); // массив элементов для поиска StringBuilder sResultString = new StringBuilder(); // возвращаемая строка поиска int iEmptyCount = 0; // количество пустых элементов после обработки // узнаём количество пустых элементов массива for (int i = 0; i < saSearchItems.Length; i++) { if(saSearchItems[i].Length == 0) iEmptyCount++; } string[] saCorrectItems = new string[saSearchItems.Length - iEmptyCount]; int iElemCounter = 0; // сформируем массив, не содержащий // пустых элементов for(int i = 0; i < saSearchItems.Length; i++) { if(saSearchItems[i].Length > 0) saCorrectItems[iElemCounter++] = saSearchItems[i]; } // если пустой массив - возвращаем пустую строку if (saCorrectItems.Length == 0) { return ""; } // сформируем верно лимит if (iParamLimit <= 0) { iParamLimit = saCorrectItems.Length; } else { iParamLimit = (saCorrectItems.Length >= iParamLimit ? iParamLimit : saCorrectItems.Length); } StringBuilder sLeft = new StringBuilder("("); StringBuilder sLine = new StringBuilder("\""); StringBuilder sOr = new StringBuilder("*\" or "); StringBuilder sRight = new StringBuilder("*\")"); sResultString.Append(sLeft); // формируем итоговую строку if (iParamLimit > 1) { for (int i = 0; i < iParamLimit - 1; i++) { sResultString.Append(sLine); sResultString.Append(saCorrectItems[i]); sResultString.Append(sOr); } } sResultString.Append(sLine); sResultString.Append(saCorrectItems[iParamLimit - 1]); sResultString.Append(sRight); return sResultString.ToString(0, sResultString.Length); } } }