[英]Help with string manipulation function
我有一组字符串,其中包含一个或多个由逗号分隔的问号,一个逗号加一个或多个空格,或者可能两者都有。 所以这些字符串都是可能的:
BOB AND ?
BOB AND ?,?,?,?,?
BOB AND ?, ?, ? ,?
BOB AND ?,? , ?,?
?, ? ,? AND BOB
我需要用@P#
替换问号,以便上面的示例变为:
BOB AND @P1
BOB AND @P1,@P2,@P3,@P4,@P5
BOB AND @P1,@P2,@P3,@P4
BOB AND @P1,@P2,@P3,@P4
@P1,@P2,@P3 AND BOB
没有正则表达式或Linq,最好的方法是什么?
如果您不想要正则表达式或LINQ,我只会编写一个循环,并使用此问题中的“ReplaceFirst”方法循环遍历字符串,替换每次出现的? 用适当的@P#。
如何在.NET中替换字符串的* first instance *?
也许是这样的:
int i = 0;
while (myString.Contains("?"))
{
myString = myString.ReplaceFirst("?", "@P" + i);
i++;
}
请注意,“ReplaceFirst”不是字符串的标准方法 - 您必须实现它(例如,作为扩展方法,在此示例中)。
为什么不生成你的SQL,因为你在代码中定义了适当的CASE参数,并在它准备就绪时最终执行它?
我忽略了输出示例中的空格修剪,因为如果要在SQL语句中使用它,则空格是无关紧要的。 由于使用了StringBuilder
而不是重复调用Replace
, Substring
或其他字符串方法,因此这应该可以很好地执行:
public static string GetParameterizedString(string s)
{
var sb = new StringBuilder();
var sArray = s.Split('?');
for (var i = 0; i < sArray.Length - 1; i++)
{
sb.Append(sArray[i]);
sb.Append("@P");
sb.Append(i + 1);
}
sb.Append(sArray[sArray.Length - 1]);
return sb.ToString();
}
如果你想要开箱即用的东西:)
string toFormat = "?, ? ,? AND BOB";
while (toFormat.Contains(" "))
toFormat = toFormat.Replace(" ", " ");
toFormat = toFormat.Replace("?", "{0}");
string formated = string.Format(toFormat, new PCounter());
PCounter就是这样的
class PCounter{
int i = 0;
public override string ToString(){
return "@P" + (++i);
}
}
我觉得像下面这样的东西应该这样做。
string input = "BOB AND ?,?,?,?,?";
int number = 1;
int index = input.IndexOf("?");
while (index > -1)
{
input = input.Substring(0, index).Trim() + " @P" + number++.ToString() + input.Substring(index + 1).Trim();
index = input.IndexOf("?");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.