繁体   English   中英

替换空格字符

[英]Replace space character

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

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

为了解决这个问题,您应该按空格分开,然后再次组装用引号引起来的零件。 以下示例显示了如何执行此操作的算法。 我故意使用了一个无效的输入字符串,该字符串的末尾只是一个引号。 输入字符串

Test0“ Test1 Test2”“ Test3 Test4

导致以下搜索字符串

Test0和“ Test1 Test2”和“ 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标记,然后join它们与AND结合在一起:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM