C# 字符串。替换不能正常工作
这是非常奇怪的,因为我已经使用替换函数数千次了。这是我的代码:C# 字符串。替换不能正常工作,c#,replace,C#,Replace,这是非常奇怪的,因为我已经使用替换函数数千次了。这是我的代码: while (d.IndexOf("--") != -1) d=d.Replace("--", "-"); 这是我跟踪时变量d的值: "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود" 但当d的值为: "آدنیس,اسم دختر,girl name,آدونیس--گلی-به-رنگ-
while (d.IndexOf("--") != -1) d=d.Replace("--", "-");
这是我跟踪时变量d的值:
"آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"
但当d的值为:
"آدنیس,اسم دختر,girl name,آدونیس--گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"
有人能告诉我为什么吗?
有趣的是,连破折号都是通过编程方式添加的。您可以使用
Regex.Replace()
这将输出:-
,这是因为:
var d1 = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
与此不同:
var d2 = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
字符串中的最后三个字符实际上不是unicode-
自己试试:
var d1 = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
var d2 = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
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
仅供参考:
字符串比较方法indexof是特定于区域性的。我将使用:
var d = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";
while (d.IndexOf("--", System.StringComparison.Ordinal) != -1)
d = d.Replace("--", "-");
因为它使用顺序规则,即与区域性无关的unicode值,所以运行速度更快 我已经用LinqPad测试过了-很有趣
// d0 succeeds:
var d0 = "world--life";
while (d0.IndexOf("--") != -1)
{
d0=d0.Replace("--", "-");
d0.Dump();
}
// d1 loops forever
var d1 = "world--life";
while (d1.IndexOf("--") != -1)
{
d1=d1.Replace("--", "-");
d1.Dump();
}
这两个循环之间的区别在于,虽然它们可能看起来相同,但第二个循环实际上使用了不同的Unicode字符作为IndexOf
中的连字符,以代替Replace
string _txt = "----------";
_txt = Regex.Replace(_txt, @"\-{2,}", "-");
查看MSDN文档:
- IndexOf---
此方法使用当前区域性执行单词(区分大小写和区域性)搜索。搜索从该实例的第一个字符位置开始,一直持续到最后一个字符位置。
- 替换---
此方法执行顺序(区分大小写和区域性)搜索以查找oldValue。
因此,与文化敏感相比,文化不敏感与文化敏感是不同的。对不起,我不明白你为什么认为这不正确。你能解释更多吗?“它卡住了”是什么意思?@Stuart替换在一个循环中,但结果包含两个未被替换的负数。@Stuart循环没有停止。indexOf返回的值与-1不同,这是正确的,但最后一个“-”不会被“-”替换,因此循环继续。您意识到非阿拉伯语读者很难看到差异,对吗?我的意图是指出,它会减少您问题中显示的文本数量,以便更容易扫描,此外,还包括许多看起来部分类似于“-”字符的字符,如果你这样做了,你会收到更多关于你的问题的回复谢谢这解决了我的问题但我真的很困惑你能告诉我替换的问题是什么吗?
replace
或regex.replace
?哦,我试着调试代码,我不是这方面的专家,但我用这个问题的字符串做了一个无限循环。也许这和编码有关。greattttttt,我用过很多indexOf,但从来没有这个问题。感谢aloti,我已经尝试过这段代码,但它似乎在我的编译器中不起作用,我遗漏了什么?我得到了答案,很有趣。看一看。我没有发现两个循环之间的区别