2014-04-26 142 views
0

我想在sql server中搜索用戶可以將關鍵字作爲"java script" j2ee的地方。我想在j2eeAND之前替換每個空間,但不是javajavascript之間的空格。替換空格字符

我迄今爲止代碼:

objCandidateShortInfo.strKeyWord = 
    "(" + 
    txtAllKeywords.Value.Trim() 
         .ToUpper() 
         .Replace(",", " ") 
         .Replace("AND NOT", "") 
         .Replace("AND", "") 
         .Replace("OR", "") 
         .Replace(" ", " ") 
         .Replace(" ", " AND ") 
    + ")"; 

它取代所有空格與AND,但我不希望有雙引號的替代空間。

你能提出一個解決我的問題嗎?

+1

讓我們看看我們的代碼.. – bgs

+0

現在我正在做像objCandidateShortInfo.strKeyWord =「(」+ txtAllKeywords.Value.Trim()。ToUpper()。Replace(「,」,「」).Replace(「 AND「,」「).Replace(」AND「,」「).Replace(」OR「,」「).Replace(」「,」「).Replace(」「,」AND「)+」)「 ;所以它用「和」替換所有空間,但我不想用雙引號替換空格 –

+0

您可以添加一些關於如何拆分的更多細節嗎?哪些字符是引號之外的有效分隔符?一個複雜的輸入字符串和預期輸出的例子會有所幫助。 – Markus

回答

1

爲了解決這個問題,您應該由空格分開,然後組裝再零件被用引號括起來。以下示例顯示瞭如何執行此操作的算法。我故意使用了一個無效的輸入字符串,最後只有一個開頭的引號。輸入字符串

TEST0 「的Test1的Test2」,「Test3的TEST4

導致下面的搜索字符串

TEST0 AND 「的Test1 Test2的」 AND 「Test3的TEST4」

該算法首先被空白分割,然後運行結果數組並重建用引號括起來的塊。在Parser類的ParseString方法中完成。獲取零件後,這些零件加入string.Join(" AND ", parts),以便構建搜索字符串。

void Main() 
{ 
    var input = "Test0 \"Test1 Test2\" \"Test3 Test4"; 
    var parts = new Parser().ParseString(input); 
    foreach(var part in parts) 
     Console.WriteLine(part); 
    var searchString = string.Join(" AND ", parts); 
    Console.WriteLine("SearchString = " + searchString); 
} 

public class Parser 
{ 
    public IEnumerable<string> ParseString(string input) 
    { 
     // Split by blanks 
     var parts = input.Split(' '); 
     var consolidatedParts = new List<string>(); 
     for(int i = 0; i < parts.Length; i++) 
     { 
      var part = parts[i]; 
      // If part starts a block of quotes, add the following parts 
      // until either a closing quotation mark is found or the end 
      // is reached 
      if (part.StartsWith("\"")) 
      { 
       while (++i < parts.Length) 
       { 
        part += " " + parts[i]; 
        if (parts[i].EndsWith("\"")) 
         break; 
       } 
       if (!part.EndsWith("\"")) 
        part += "\""; 
      } 
      consolidatedParts.Add(part); 
     } 
     return consolidatedParts.AsReadOnly(); 
    } 
} 

在您的代碼示例中,首先從輸入字符串中刪除一些單詞(例如AND和AND NOT)。您需要在分割字符串之前執行此操作。

+0

非常感謝Markus –

+0

@Ravikant:很高興知道它的幫助。 。 – Markus

0

你首先能split令牌,然後join他們AND S:

objCandidateShortInfo.strKeyWord 
    = string.Join(" AND ", txtAllKeywords.Value.Split('"')); 
+0

感謝您的答覆,但是當我把兩個「ie」「」'它顯示錯誤消息太多字符字符文字 –

+0

糟糕,當然只使用一個。 – Dunken

+0

感謝Dunken其工作正常,但如果用戶將關鍵字像「」asp.net「java javascript」,那麼它不放置和Java和javascript之間 –