9

何千回も置換機能を使用してきたので、これは非常に奇妙です。これは私のコードです:

while (d.IndexOf("--") != -1) d=d.Replace("--", "-");

これは、トレースしたときの変数dの値です。

"آدنیس,اسم دختر,girl name,آدونیس--‌-گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"

しかし、 dの値が次の場合にスタックしました:

"آدنیس,اسم دختر,girl name,آدونیس-‌-گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود"

誰でも理由を教えてもらえますか? ダッシュでさえプログラムで追加されるのはおかしいです。

4

3 に答える 3

18

それは、次の理由によるものです。

var d1 = "آدنیس,اسم دختر,girl name,آدونیس--‌-گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";

これと同じではありません:

var d2 = "آدنیس,اسم دختر,girl name,آدونیس---گلی-به-رنگ-زرد-و-قرمز-که-فقط-هنگام-تابش-خورشید-باز-می-شود";

文字列の最後の 3 文字は、実際には 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 値を使用するため、より高速に実行されます。

于 2013-05-07T06:48:35.660 に答える
4

使用できますRegex.Replace()

string _txt = "----------";
_txt = Regex.Replace(_txt, @"\-{2,}", "-");

これは出力されます:-

于 2013-05-07T06:40:50.627 に答える