替换空格字符

时间:2014-04-26 08:23:18

标签: c# string replace

我想在sql server中搜索,用户可以将关键字设为"java script" j2ee。我想将j2ee之前的每个空格替换为AND,而不是javajavascript之间的空格。

到目前为止我的代码:

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

它用AND替换所有空格,但我不想替换双引号中的空格。

你能建议解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,您应该通过空白分割,然后再次组装用引号括起来的部分。以下示例显示了如何执行此操作的算法。我有意使用了一个无效的输入字符串,最后只有一个开头的引号。输入字符串

  

Test0" Test1 Test2" " Test3 Test4

导致以下搜索字符串

  

Test0 AND" Test1 Test2" AND" Test3 Test4"

算法首先按空白分割。然后它在结果数组上运行并重建用引号括起来的块。这是在ParseString类的Parser方法中完成的。获取部件后,这些部件将由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)。您需要在拆分字符串之前执行此操作。

答案 1 :(得分:0)

您可以先split代币,然后join使用AND s:

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