替换空格字符

本文关键字:字符 空格 替换 | 更新日期: 2023-09-27 18:00:10

我想在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替换所有空格,但我不想替换双引号中的空格。

你能为我的问题提出一个解决方案吗?

替换空格字符

为了解决这个问题,您应该通过空格进行拆分,然后重新组装用引号括起来的零件。下面的示例显示了如何执行此操作的算法。我故意使用了一个无效的输入字符串,末尾只有一个开头的引号。输入字符串

测试0"测试1测试2"测试3测试4

导致以下搜索字符串

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)。您需要在拆分字符串之前执行此操作。

您可以首先使用split令牌,然后使用AND s:使用join令牌

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