C#替换字符串
问题描述:
我有一个列表文字及其替换词,例如: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