这是非常奇怪的,因为我使用Replace功能数千次.这是我的代码:
while (d.IndexOf("--") != -1) d=d.Replace("--","-");
当我跟踪时,这是变量值:
"آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"
但是当d的值为:
"آدنیس,آدونیس--گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"
有人可以告诉我为什么吗
有趣的是,即使是破折号也是以编程方式添加的.
解决方法
那是因为这个:
var d1 = "آدنیس,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
是不一样的:
var d2 = "آدنیس,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
你的字符串中的最后三个字符实际上不是unicode – 自己尝试一下:
var d1 = "آدنیس,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"; var d2 = "آدنیس,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"; while (d.IndexOf("--",StringComparison.Ordinal) != -1) d1 = d1.Replace("--","-"); Console.WriteLine(d1); // the last characters are left while (d2.IndexOf("--",StringComparison.Ordinal) != -1) d2 = d2.Replace("--","-"); Console.WriteLine(d2); // All clear
只是FYI:
字符串比较法指标是文化特定的.我会用:
var d = "آدنیس,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"; while (d.IndexOf("--",System.StringComparison.Ordinal) != -1) d = d.Replace("--","-");
因为它使用了顺序规则,即文化独立的unicode值,并且运行速度更快.