替换空格字符
本文关键字:字符 空格 替换 | 更新日期: 2023-09-27 18:00:10
我想在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
替换所有空格,但我不想替换双引号中的空格。
你能为我的问题提出一个解决方案吗?
为了解决这个问题,您应该通过空格进行拆分,然后重新组装用引号括起来的零件。下面的示例显示了如何执行此操作的算法。我故意使用了一个无效的输入字符串,末尾只有一个开头的引号。输入字符串
测试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('"'));