2014-04-26 147 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之间 –