2011-02-23 222 views
0

我確實需要一個可用的ASP.NET C#代碼來替換字符串中的字符。字符串中的字符替換

我的下面的代碼工作正常,但在輸入「a」的情況下它給了我一個輸出爲「678d」,但是在輸入「c」的情況下輸出正確,因爲它是ie「8d」...這裏它會自動替換剩餘的值。我可以看到代碼在一步一步的過程中執行......這導致我得到一個超載的輸出。

{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Replace("a", "6b"); 
    builder.Replace("b", "7c"); 
    builder.Replace("c", "8d"); 
    return builder.ToString(); 
} 

現在,我確實需要將「a」替換爲「6b」,它不應該加載其餘的值。

回答

1

更獨立於實際替代的,你可以做一個雙向的更換:

首先替換的佔位符的出現,將不會出現在字符串中(如%% 1 %%來代替「 a「,%% 2 %%代替」b「等)。

然後,在第二次運行中替換%% 1 %%用 「8D」,%% 2 %%用 「7C」 等

這將在任何情況下工作。

+0

感謝您的答案希望它可以幫助我在某些情況下...但代碼變得困惑...不管怎樣,非常感謝很多.... – lock 2011-02-23 10:19:34

0

你需要改變你的內容替換的順序:

StringBuilder builder = new StringBuilder(); 
builder.Replace("c", "8d"); 
builder.Replace("b", "7c"); 
builder.Replace("a", "6b"); 
return builder.ToString(); 
+0

感謝您的回答,但我剛剛給出了一個示例代碼。在我原來的代碼中,一位必須用1000位代替,所以更改順序將導致無法使用。我需要一個代碼,它獨立運行每一行,而不依賴於下一個或之前的行... – lock 2011-02-23 09:12:54

+0

我想這將是可能的使用數組語句...不知道,但只是一個公平的猜測...! – lock 2011-02-23 09:13:58

1

您的代碼正在下降,雖然從一個聲明給了別人 - 因此你首先替換6b中的一個,然後你更換的的B 6b與7c等。

因此,在特定情況下,你可以把你周圍的語句,使後者語句不上與先前的反應順序 - 像

builder.Replace(「C」,「8D」 );

builder.Replace(「b」,「7c」);

builder.Replace(「a」,「6b」);

0

試試這個:

Regex rx = new Regex("a|b|c"); 

string str = "abc"; 

MatchEvaluator matcher = match => { 
    string value = match.Value; 
    if (value == "a") { 
     return "6b"; 
    } else if (value == "b") { 
     return "7c"; 
    } else { 
     return "8d"; 
    } 
}; 

var str2 = rx.Replace(str, matcher); 

或者這個,如果你不希望使用正則表達式:

static void Main(string[] args) 
{ 
    var replacements = new[] { 
     new Tuple<string, string>("a", "6b"), 
     new Tuple<string, string>("b", "6c"), 
     new Tuple<string, string>("c", "6a") 
    }; 

    string str = "adbc"; 
    var str2 = MultipleReplace(str, replacements); 
} 

static string MultipleReplace(string str, IEnumerable<Tuple<string, string>> replacements) { 
    StringBuilder str2 = new StringBuilder(); 

    for (int i = 0; i < str.Length; i++) { 
     bool found = false; 

     foreach (var rep in replacements) { 
      if (str.Length - i >= rep.Item1.Length && str.Substring(i, rep.Item1.Length) == rep.Item1) { 
       str2.Append(rep.Item2); 
       i += rep.Item1.Length - 1; 
       found = true; 
       break; 
      } 
     } 

     if (!found) { 
      str2.Append(str[i]); 
     } 
    } 

    return str2.ToString(); 
} 
+0

此代碼顯示編譯時的錯誤...請清除... – lock 2011-02-23 09:48:52

+0

您必須添加'使用System.Text.RegularExpressions' – xanatos 2011-02-23 09:50:24

+0

錯誤命名空間元組和IEnumerable無法找到:(希望此代碼的工作原理,但只是一些錯誤,請進一步幫助我...感謝您的回答... – lock 2011-02-23 10:29:56

0

你可以只使用空格一個字母后頭。如在「a」中加上「a」並用所需文字替換「a」。