如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倍。
可以写了小测试
为了公平起见,你可以把 r1 跟 r2 计算的两条代码对调位置,看看打印结果。
当然,使用 Split 或者 StringBuilder.Replace,都是对字符串的简单操作,都是轻量级的操作。已经算是比较快的操作了。
可以写了小测试
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();
}
}
输出:
#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倍。
可以写了小测试
为了公平起见,你可以把 r1 跟 r2 计算的两条代码对调位置,看看打印结果。
当然,使用 Split 或者 StringBuilder.Replace,都是对字符串的简单操作,都是轻量级的操作。已经算是比较快的操作了。
可以写了小测试
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();
}
}
输出: