代码之家  ›  专栏  ›  技术社区  ›  MusiGenesis

字符串操作函数的帮助

  •  1
  • MusiGenesis  · 技术社区  · 14 年前

    我有一组字符串,其中包含一个或多个由逗号分隔的问号,逗号加上一个或多个空格,或者可能两者都包含。所以这些弦都是可能的:

    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
    

    没有regex或linq,最好的方法是什么?

    5 回复  |  直到 14 年前
        1
  •  1
  •   D'Arcy Rittich    14 年前

    我忽略了输出示例中空格的修剪,因为如果要在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();
    } 
    
        2
  •  1
  •   Community CDub    7 年前

    如果您不需要regex或linq,我只需编写一个循环,然后使用这个问题中的“replaceFirst”方法循环字符串,替换每个出现的?使用适当的@p。\

    How do I replace the *first instance* of a string in .NET?

    可能是这样的:

    int i = 0;
    while (myString.Contains("?"))
    {
        myString = myString.ReplaceFirst("?", "@P" + i);
        i++;
    }
    

    请注意,“replaceFirst”不是字符串的标准方法-您必须实现它(例如,在本例中,作为扩展方法)。

        3
  •  1
  •   Jull    14 年前

    为什么不在得到参数时生成sql,在代码中定义适当的大小写,并在准备好后在最后执行它呢?

        4
  •  1
  •   Fede    14 年前

    如果你想从盒子里拿出点东西:)

    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);
        }
    }
    
        5
  •  0
  •   Anthony Pegram    14 年前

    我想应该用下面这样的方法。

    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("?");
    }