2012-08-16 200 views
0

我有一個列表文字及其替換詞,例如:C#替換字符串

服務 - >表 等

因此,可以說,如果用戶寫它會給結果但如果用戶寫與資本D它不會做任何改變。我知道如何忽略大寫,但然後世界將被替換爲其中是小寫...我想要是大寫。所以如果桌子 - >桌子和桌子 - >桌子......我怎麼能做到這一點?

+2

你看過RegEx嗎? – JohnnBlade 2012-08-16 05:41:13

+0

不,我沒有...因此,您的意思是RegEx將解決我的問題,對吧? – Alkis 2012-08-16 05:43:56

+0

你可以做些什麼來替換函數第二個電話,並與表取代,而不是無視外殼臺。我有一個問題,如果原始單詞是DEsk,是否應該替換爲TAble?或者這僅適用於第一個字母? – Tibi 2012-08-16 05:44:06

回答

1

您可以第二次調用替換函數,第二次使用大寫字母。

例如:

string result = input.Replace ("desk", "table"); 
result = result.Replace ("Desk", "Table"); 

得到一個字符串爲大寫的第一個字符是不是很困難。您可以使用此方法:

string lower = "desk"; 
string upper = char.ToUpper(lower[0]) + lower.Substring(1); 
0

您可以使用下面的代碼,以使輸入字符串轉換爲大寫的第一個字母,

str = str.First().ToString().ToUpper() + String.Join("", str.Skip(1)); 
你的情況

現在,使用字典的數據結構來存儲數據。

  1. 存儲輸入值作爲這樣的(鍵)桌式>表(值)

  2. 現在使用上面的代碼和使第一個字母大寫和存儲它(桌式>表)

因此,您現在可以像desk - > table和Desk - > Table一樣獲取值。

這總是通過損害空間複雜度來獲取時間複雜度O(1)的值。

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; 
    } 

希望這可以幫助