[英]Replace space character
我想在sql server中搜索,用户可以在其中输入关键字作为"java script" j2ee
。 我想将j2ee
之前的所有空格替换为AND
,而不是java
和javascript
之间的空格。
到目前为止,我的代码:
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.