c# – String.Replace不能正常工作

前端之家收集整理的这篇文章主要介绍了c# – String.Replace不能正常工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是非常奇怪的,因为我使用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值,并且运行速度更快.

原文链接:https://www.f2er.com/csharp/96499.html

猜你在找的C#相关文章