我有一個列表文字及其替換詞,例如:C#替換字符串
服務 - >表 等
因此,可以說,如果用戶寫臺它會給結果表但如果用戶寫臺與資本D它不會做任何改變。我知道如何忽略大寫,但然後世界將被替換爲表其中噸是小寫...我想要噸是大寫。所以如果桌子 - >桌子和桌子 - >桌子......我怎麼能做到這一點?
我有一個列表文字及其替換詞,例如:C#替換字符串
服務 - >表 等
因此,可以說,如果用戶寫臺它會給結果表但如果用戶寫臺與資本D它不會做任何改變。我知道如何忽略大寫,但然後世界將被替換爲表其中噸是小寫...我想要噸是大寫。所以如果桌子 - >桌子和桌子 - >桌子......我怎麼能做到這一點?
您可以第二次調用替換函數,第二次使用大寫字母。
例如:
string result = input.Replace ("desk", "table");
result = result.Replace ("Desk", "Table");
得到一個字符串爲大寫的第一個字符是不是很困難。您可以使用此方法:
string lower = "desk";
string upper = char.ToUpper(lower[0]) + lower.Substring(1);
您可以使用下面的代碼,以使輸入字符串轉換爲大寫的第一個字母,
str = str.First().ToString().ToUpper() + String.Join("", str.Skip(1));
你的情況
現在,使用字典的數據結構來存儲數據。
存儲輸入值作爲這樣的(鍵)桌式>表(值)
現在使用上面的代碼和使第一個字母大寫和存儲它(桌式>表)
因此,您現在可以像desk - > table和Desk - > Table一樣獲取值。
這總是通過損害空間複雜度來獲取時間複雜度O(1)的值。
你說的是你有一個單詞和替換單詞列表。因此,數據結構將
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("desk","table");
dict.Add("Desk","Table");
如果這是正確的,那麼下面的工作
var result = dict["Desk"];
但如果你在下面的方式維護的值,
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("desk","table");
然後解決方案可能是
private void button1_Click(object sender, EventArgs e)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("desk","table");
string input = "Desk";
var dictValue = dict[input.ToLower()];
var result = IsInitCap(input.Substring(0, 1))
? System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(dictValue)
: dictValue;
}
private bool IsInitCap(string str)
{
Match match = Regex.Match(str, @"^[A-Z]");
return match.Success ? true : false;
}
希望這可以幫助
你看過RegEx嗎? – JohnnBlade 2012-08-16 05:41:13
不,我沒有...因此,您的意思是RegEx將解決我的問題,對吧? – Alkis 2012-08-16 05:43:56
你可以做些什麼來替換函數第二個電話,並與表取代,而不是無視外殼臺。我有一個問題,如果原始單詞是DEsk,是否應該替換爲TAble?或者這僅適用於第一個字母? – Tibi 2012-08-16 05:44:06