c#中特定位置的字符串替换

Posted

技术标签:

【中文标题】c#中特定位置的字符串替换【英文标题】:String replace in specific positioned in 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 中的查询字符串 现在我该如何编码? 【参考方案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+)

其他链接:

正则表达式解释:https://regex101.com/r/aN8fV2/1 MSDN: Regex.Replace Method (String, String)

【讨论】:

老兄.. 你太棒了!!【参考方案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。您不需要编码转义字符。

以上是关于c#中特定位置的字符串替换的主要内容,如果未能解决你的问题,请参考以下文章

用多个新字符串替换文件中特定位置的单个字符串

查找字符串中特定字符最后出现的位置

正则表达式用特定格式 C# 替换整个单词

sql 替换 两特定字符(含特定字符)之间的字段

怎么用C语言对文件操作用特定内容替换其中某些内容

如何使用 C# 在给定文本中用忽略空格、回车或换行符替换字符串