例如,
string myString1 = "abcdef";
string myString2;
myString2 = myString1.Replace("a", "abc").Replace("b", "bcd");
輸出將是“abcdcbcdcdef”。我希望我的輸出是“abcbcdcdef”。我知道你可以使用 StringBuilder 來做到這一點,但有更短的版本嗎?我需要使用大量字符(> 100)來執行此操作。
uj5u.com熱心網友回復:
最簡單的方法可能是遍歷字串的字符:
string myString1 = "abcdef";
StringBuilder result = new StringBuilder();
foreach (char c in myString1)
{
if (c == 'a') // if the character is a, append abc
{
result.Append("abc");
}
else if (c == 'b') // if the character is b, append bcd
{
result.Append("bcd");
}
else // otherwise append the character verbatim
{
result.Append(c);
}
}
string myString2 = result.ToString(); // produce a string from the StringBuilder
這會根據需要生成“abcbcdcdef”。
另一種方法是使用帶有自定義評估器的正則運算式:
string myString1 = "abcdef";
string myString2 = Regex.Replace(myString1, "[ab]", new MatchEvaluator(
m => m.Value switch {
"a" => "abc",
"b" => "bcd",
_ => m.Value
})
);
正則運算式[ab]將匹配字符a或字符b并將其傳遞給m.Value. 您可以在此處使用范圍(例如[a-z]),它將字母表中的任何字符傳遞給評估器方法。由于 switch 陳述句的“其他”部分只回傳原始值,因此您可以使用大于實際替換值的范圍。
這也會產生“abcbcdcdef”。
uj5u.com熱心網友回復:
如果你有大量的字符,我建議提取資料,讓它成為一個字典,Key一個要查找的字符和Value要放置的字串:
Dictionary subs = new Dictionary<chra, string> {
{'a', "abc"},
{'b', "bcd"},
//TODO: add your rules here
};
那么你可以在 Linq 的幫助下輕松查詢字串:
using System.Linq;
...
string myString1 = "abcdef";
string myString2 = string.Concat(myString1
.Select(c => subs.TryGetValue(c, out var s) ? s : c.ToString()));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526203.html
標籤:C#细绳代替
