【问题标题】:String replace in specific positioned in c#c#中特定位置的字符串替换
【发布时间】:2015-10-18 20:36:54
【问题描述】:

我有一个字符串Classic-T50 (Black+Grey) 当我通过查询字符串发送到时,它将显示在下一页中

Classic-T50 (Black Grey)

所以我想在这个字符串的空格中添加 + 只在括号()部分。

Classic-T50 (Black+Grey).

我试过string.Replace(" ","+")。但它会产生

Classic-T50+(Black+Grey).

但我想要字符串Classic-T50 (Black+Grey).

请帮帮我。

【问题讨论】:

  • 你应该对你的字符串进行 url 编码。
  • Gridview 中的查询字符串 现在我该如何编码?

标签: c# asp.net regex c#-4.0


【解决方案1】:

您可以使用regular expression 替换括号内的所有空格:

var pattern = @"\s(?![^)]*\()";
var data = "Classic-T50 (Black Grey)";
var replacement = "+";
var regex = new Regex(pattern);
var transformedData = regex.Replace(data, replacement); // Classic-T50 (Black+Grey)

这种方法适用于任何输入字符串。例如,字符串Caption ( A B C D ) 将转换为Caption (+A+B+C+D+)

其他链接:

【讨论】:

  • 老兄.. 你太棒了!!
【解决方案2】:

您要修改的字符串的格式是什么?这段代码能用吗?

void Main()
{
    var str = "Classic-T50 (Black Grey)";

    Console.WriteLine(FormatWithPlus(str));
}

public string FormatWithPlus(string str){
    var str1 = str.Substring(0, str.IndexOf('('));
    var str2 = str.Substring(str.IndexOf('('));

    return str1 + str2.Replace(' ', '+');
}

【讨论】:

    【解决方案3】:

    使用StringBuilder 并转换回string。 StringBuilder 与字符串的不同之处在于它们是可变的和非内部的。它将数据存储在数组中,因此您可以像在数组中一样替换字符:

    void Main()
    {
        var input = "Classic-T50 (Black Grey)";
        StringBuilder inputsb = new StringBuilder(input);
        var openParens = input.IndexOf('(');
        var closeParens = input.IndexOf(')');
        var count = closeParens - openParens;
        //Console.WriteLine(input);
        //inputsb[18] = '+';
        inputsb.Replace(' ', '+', openParens, count);
        Console.WriteLine(inputsb.ToString());
    }
    

    StringBuilder.Replace Method (Char, Char, Int32, Int32

    【讨论】:

      【解决方案4】:

      尝试:

      String.Replace("k ","k+")
      

      【讨论】:

      • 似乎您的要求已经过细化,以用加号替换括号内的所有空格。您可以使用下面的字符串生成器示例;我会根据新要求进行修改。
      【解决方案5】:

      使用此代码

      public class Program
          {
              private static void Main(string[] args)
              {
                  const string abc = "Classic-T50 (Black Grey)";
                  var a = abc.Replace("k ", "k+");
                  Console.WriteLine(a);
                  Console.ReadKey();
              }
          }
      

      【讨论】:

        【解决方案6】:

        您可以对其进行 UrlEncode 以保留特殊字符:

        Server.UrlEncode(mystring)
        

        或者用“%252b”替换+号,然后编码:

        string myTitle = mystring.Trim().Replace("+", "%252b"); 
        Response.Redirect("~/default.aspx?title=" + Server.UrlEncode(myTitle));
        

        一旦您尝试检索它,请记住对其进行解码:

        Server.UrlDecode(Request.QueryString["title"]);
        

        【讨论】:

        • 如果是"%252b,您将得到%2b。您不需要编码转义字符。
        猜你喜欢
        • 1970-01-01
        • 2017-09-17
        • 2013-05-12
        • 2017-04-10
        • 2011-01-15
        • 2021-01-27
        • 2015-05-05
        • 2012-07-20
        • 2018-11-09
        相关资源
        最近更新 更多