C#如何替换字符串中第一个分隔符

时间:2021-07-02 05:39:12
请教各位一个问题一个字符串有多个相同的分隔符,如何将第一个分隔符替换成其它的分隔符?
如string str="abc,def,ghk,123";将第一个逗号替换成"#"变为
str="abc#def,ghk,123";

希望各位高手赐教,谢谢!

10 个解决方案

#1


string str = "abc,def,ghk,123";
Regex regex = new Regex(",");
Console.WriteLine(regex.Replace(str, "#", 1));

#2


            string str = "abc,def,ghk,123";
            var sb = new StringBuilder(str);
            str = sb.Replace(",", "#", str.IndexOf(","), 1).ToString();

#3


替换就用replace就可以了啊

#4


既然是分隔符,你就可以用 slit 分割。例如
var sp = str.Split(new char[] { ',', ',' }, 2);
你就分割为两个字符串了。然后随便连接。

#5


对于字符串的分割,要尽量轻量级的字符串操作函数。

#6


IndexOf()+Replace()

#7


要注意,StringBuilder.Replace 虽然做了很大努力的优化(打开看看源代码就知道了),但是 Replace 毕竟不是干这个专题的,它还是慢将近3倍。

可以写了小测试
using System;
using System.Diagnostics;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "abc,def,ghk,123";
            var sw = new Stopwatch();
            TimeSpan r1, r2;
            r2 = test2(str, sw);
            sw.Reset();
            r1 = test1(str, sw);
            Console.WriteLine("replace用时{0}", r1.TotalMilliseconds);
            Console.WriteLine("split用时{0}", r2.TotalMilliseconds);
            Console.WriteLine("......................请按任意键结束");
            Console.ReadKey();
        }

        private static TimeSpan test1(string str, Stopwatch sw)
        {
            sw.Start();
            for (var i = 0; i < 1000; i++)
            {
                var sb = new StringBuilder(str);
                var rr = sb.Replace(",", "#", str.IndexOf(","), 1).ToString();
            }
            sw.Stop();
            return sw.Elapsed;
        }

        private static TimeSpan test2(string str, Stopwatch sw)
        {
            sw.Start();
            for (var i = 0; i < 1000; i++)
            {
                var sp = str.Split(new char[] { ',', ',' }, 2);
                var rr = sp[0] + "#" + sp[1];
            }
            sw.Stop();
            return sw.Elapsed;
        }
    }
}


为了公平起见,你可以把 r1 跟 r2 计算的两条代码对调位置,看看打印结果。

当然,使用 Split 或者 StringBuilder.Replace,都是对字符串的简单操作,都是轻量级的操作。已经算是比较快的操作了。

#8


string str = "abc,def,ghk,123";
str = string.Join("#", str.Split(new[] { ',' }, 2));
Debug.WriteLine(str);

#9


学习了,收藏。

#10


系统提供的东西,用起来方便,但会损失性能,请看下面验证(replace和基本算法比较)

public interface Isomemethod
{
    string CurrMethod();
}

public class Base
{
    public string inputStr { get; set; }
}

public class ReplaceC:Base,Isomemethod
{
    public string CurrMethod()
    {
        StringBuilder sb = new StringBuilder(inputStr);
        Stopwatch watch = new Stopwatch();
        watch.Start();
        for(int i=0;i<10000;i++)
        {
            sb.Replace(',', '#', inputStr.IndexOf(','), 1);
        }
        watch.Stop();
        return "Replaced String:" + sb.ToString() + "  Execute Time:" + watch.Elapsed;
    }
}

public class Algorithm:Base,Isomemethod
{
    public string CurrMethod()
    {
        StringBuilder sb = new StringBuilder(inputStr);
        Stopwatch watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < 10000; i++)
        {
            sb[inputStr.IndexOf(',')] = '#';
        }
        watch.Stop();
        return "Replaced String:" + sb.ToString() + "  Execute Time:" + watch.Elapsed;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ReplaceC replace = new ReplaceC();
        replace.inputStr = "abc,def,ghk,123";
        Console.WriteLine(replace.CurrMethod());

        Algorithm alg = new Algorithm();
        alg.inputStr = "abc,def,ghk,123";
        Console.WriteLine(alg.CurrMethod());

        Console.Read();

    }

}



输出:
C#如何替换字符串中第一个分隔符

#1


string str = "abc,def,ghk,123";
Regex regex = new Regex(",");
Console.WriteLine(regex.Replace(str, "#", 1));

#2


            string str = "abc,def,ghk,123";
            var sb = new StringBuilder(str);
            str = sb.Replace(",", "#", str.IndexOf(","), 1).ToString();

#3


替换就用replace就可以了啊

#4


既然是分隔符,你就可以用 slit 分割。例如
var sp = str.Split(new char[] { ',', ',' }, 2);
你就分割为两个字符串了。然后随便连接。

#5


对于字符串的分割,要尽量轻量级的字符串操作函数。

#6


IndexOf()+Replace()

#7


要注意,StringBuilder.Replace 虽然做了很大努力的优化(打开看看源代码就知道了),但是 Replace 毕竟不是干这个专题的,它还是慢将近3倍。

可以写了小测试
using System;
using System.Diagnostics;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "abc,def,ghk,123";
            var sw = new Stopwatch();
            TimeSpan r1, r2;
            r2 = test2(str, sw);
            sw.Reset();
            r1 = test1(str, sw);
            Console.WriteLine("replace用时{0}", r1.TotalMilliseconds);
            Console.WriteLine("split用时{0}", r2.TotalMilliseconds);
            Console.WriteLine("......................请按任意键结束");
            Console.ReadKey();
        }

        private static TimeSpan test1(string str, Stopwatch sw)
        {
            sw.Start();
            for (var i = 0; i < 1000; i++)
            {
                var sb = new StringBuilder(str);
                var rr = sb.Replace(",", "#", str.IndexOf(","), 1).ToString();
            }
            sw.Stop();
            return sw.Elapsed;
        }

        private static TimeSpan test2(string str, Stopwatch sw)
        {
            sw.Start();
            for (var i = 0; i < 1000; i++)
            {
                var sp = str.Split(new char[] { ',', ',' }, 2);
                var rr = sp[0] + "#" + sp[1];
            }
            sw.Stop();
            return sw.Elapsed;
        }
    }
}


为了公平起见,你可以把 r1 跟 r2 计算的两条代码对调位置,看看打印结果。

当然,使用 Split 或者 StringBuilder.Replace,都是对字符串的简单操作,都是轻量级的操作。已经算是比较快的操作了。

#8


string str = "abc,def,ghk,123";
str = string.Join("#", str.Split(new[] { ',' }, 2));
Debug.WriteLine(str);

#9


学习了,收藏。

#10


系统提供的东西,用起来方便,但会损失性能,请看下面验证(replace和基本算法比较)

public interface Isomemethod
{
    string CurrMethod();
}

public class Base
{
    public string inputStr { get; set; }
}

public class ReplaceC:Base,Isomemethod
{
    public string CurrMethod()
    {
        StringBuilder sb = new StringBuilder(inputStr);
        Stopwatch watch = new Stopwatch();
        watch.Start();
        for(int i=0;i<10000;i++)
        {
            sb.Replace(',', '#', inputStr.IndexOf(','), 1);
        }
        watch.Stop();
        return "Replaced String:" + sb.ToString() + "  Execute Time:" + watch.Elapsed;
    }
}

public class Algorithm:Base,Isomemethod
{
    public string CurrMethod()
    {
        StringBuilder sb = new StringBuilder(inputStr);
        Stopwatch watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < 10000; i++)
        {
            sb[inputStr.IndexOf(',')] = '#';
        }
        watch.Stop();
        return "Replaced String:" + sb.ToString() + "  Execute Time:" + watch.Elapsed;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ReplaceC replace = new ReplaceC();
        replace.inputStr = "abc,def,ghk,123";
        Console.WriteLine(replace.CurrMethod());

        Algorithm alg = new Algorithm();
        alg.inputStr = "abc,def,ghk,123";
        Console.WriteLine(alg.CurrMethod());

        Console.Read();

    }

}



输出:
C#如何替换字符串中第一个分隔符