【问题标题】:How to remove LAST INSTANCE of a character from a string如何从字符串中删除字符的最后一个实例
【发布时间】:2013-08-20 07:50:29
【问题描述】:

我正在用 StringBuilder 构建一个字符串。

StringBuilder Q = new StringBuilder();
Q.Append("INSERT INTO ");
Q.Append(_lstview_item);
Q.Append(" VALUES");
Q.Append("("); 
for (i = 0; i < col_no; i++)
{
    Q.Append("'");
    Q.Append(col_value[i]);
    Q.Append("'");
    Q.Append(",");
} 
Q.Append(")");
string query = Q.ToString();

但是,我的字符串末尾有一个","。 我尝试使用

string query = ext.Substring(0, ext.LastIndexOf(",") + 1);

删除多余的",",但这也删除了")"。

如何仅删除 最后一个 逗号?

实际结果:INSERT INTO .... VALUES('1','2','3',)

期望的结果:INSERT INTO .... VALUES('1','2','3')

【问题讨论】:

  • 它没有回答您的问题,但我真的鼓励您使用参数化查询,而不是通过连接字符串来生成它们。 SO上有大量关于如何做到这一点的帖子。
  • 如果你想先去掉逗号,为什么还要加你Q.Append(")");?
  • 解决办法不是去掉逗号,而是换一种方式。
  • @TimSchmelter 有了这样的推理,人们可能会问为什么它不仅有条件地添加到循环中。
  • 你永远是一个远离毁灭的bobby tables!

标签: c# asp.net string character trim


【解决方案1】:

您可以使用“删除”方法来删除某个位置的特定字符:

query = query.Remove(query.LastIndexOf(","), 1);

【讨论】:

    【解决方案2】:

    这个:

    Q.Append(")");
    

    替换为

    if (col_no > 0)
    {
        Q.Length--;
    }
    
    Q.Append(")");
    

    检查if (col_no &gt; 0)有点过分,因为如果没有列,查询仍然会由于其他原因而失败,但是如果我们认为这是一个关于如何在StringBuilder中组合字符串的模板,那么检查是正确的事情。

    啊...以这种方式构建查询是错误的事情。

    【讨论】:

      【解决方案3】:

      我建议在添加最后一个 ) 之前先删除逗号,所以:

      for (i = 0; i < col_no; i++)
      {
          Q.Append("'");
          Q.Append(col_value[i]);
          Q.Append("'");
          Q.Append(",");
      
      } 
      if(col_no > 0) Q.Length --; // <-- this removes the last character
      Q.Append(")");
      string query = Q.ToString();
      

      但是,如果你真的想创建一个 sql-query,我强烈建议使用 sql-parameters 来防止 sql-injection。所以不要在你的 sql-string 中包含这些值。

      【讨论】:

        【解决方案4】:
        1. 实现目标的正确方法是使用参数化查询。
        2. 可以在放入括号之前删除最后一个逗号
        3. 您的问题的纯粹答案可能是这样的:

        。

        string query = ext.Substring(0, ext.LastIndexOf(",")) + ext.Substring(ext.LastIndexOf(",") + 1);
        

        或者这个:

        string query = ext.Remove(ext.LastIndexOf(","), 1);
        

        【讨论】:

          【解决方案5】:

          试试这个。简单的逻辑

          检查下面的if条件在附加逗号之前

                            **if(i!=(col_no-1))
                              {
                              Q.Append(",");
                              }*
          

          使用您的代码。

                           for (i = 0; i < col_no; i++)
                            {
                              Q.Append("'");
                              Q.Append(col_value[i]);
                              Q.Append("'");
                              **if(i!=(col_no-1))
                              {
                              Q.Append(",");
                              }**
          
                            } 
          

          【讨论】:

            【解决方案6】:

            替换

                        Q.Append(","); 
            

            在for循环内

                        if (i != col_no - 1)
                        {
                            Q.Append(",");
                        }
            

            【讨论】:

              猜你喜欢
              • 2021-12-11
              • 2011-11-18
              • 2017-08-19
              • 2020-03-12
              • 1970-01-01
              • 2011-01-19
              相关资源
              最近更新 更多