[英]Function to Make Pascal Case? (C#)
我需要一个带字符串和“pascal case”的函数。 新单词开始的唯一指标是下划线。 以下是一些需要清理的示例字符串:
我开始研究一个使第一个字符为大写的函数:
public string FirstCharacterUpper(string value)
{
if (value == null || value.Length == 0)
return string.Empty;
if (value.Length == 1)
return value.ToUpper();
var firstChar = value.Substring(0, 1).ToUpper();
return firstChar + value.Substring(1, value.Length - 1);
}
上面的函数没有做的是删除下划线和“ToUpper”字符右下角。
此外,任何有关如何使用没有任何指标(如下划线)的字符串的概念。 例如:
这里的主要挑战是确定一个词的结束和另一个词的开始。 我想我需要某种查找字典来确定新单词的起源位置? 我们那里有图书馆可以做这种事吗?
谢谢,
保罗
您可以使用TextInfo.ToTitleCase方法,然后删除'_'字符。
所以,使用我得到的扩展方法:
http://theburningmonk.com/2010/08/dotnet-tips-string-totitlecase-extension-methods
你可以做点什么:
var s = "price_old";
s.ToTitleCase().Replace("_", string.Empty);
那么第一件事很简单:
string.Join("", "price_old".Split(new [] { '_' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Substring(0, 1).ToUpper() + s.Substring(1)).ToArray());
返回PriceOld
第二件事情更难。 由于companysource
可能是CompanySource
或者CompanysOurce
,因此可以自动化但是非常错误。 你需要一本英文字典 ,然后做一些猜测(好吧,我的意思是很多 )哪个词的组合是正确的。
尝试这个:
public static string GetPascalCase(string name)
{
return Regex.Replace(name, @"^\w|_\w",
(match) => match.Value.Replace("_", "").ToUpper());
}
Console.WriteLine(GetPascalCase("price_old")); // => Should be PriceOld
Console.WriteLine(GetPascalCase("rank_old" )); // => Should be RankOld
带下划线:
s = Regex.Replace(s, @"(?:^|_)([a-z])",
m => m.Groups[1].Value.ToUpper());
没有下划线:
你自己在那里。 但是继续搜索; 如果没有人这样做过,我会感到惊讶。
对于你分裂串联单词的第二个问题,你可以利用我们最好的朋友Google&Co。如果你的连接输入由通常的英语单词组成,搜索引擎对单个单词的命中率很高,作为另一个搜索查询
如果您输入样本输入,Google和Bing会建议以下内容:
original | Google | Bing
=====================================================================
companysource | company source | company source
financialtrend | financial trend | financial trend
accountingchangetype | accounting changetype | accounting change type
看到这个例子 。
为此编写一个小屏幕刮刀应该相当容易。
对于那些需要非正则表达式解决方案的人
public static string RemoveAllSpaceAndConcertToPascalCase(string status)
{
var textInfo = new System.Globalization.CultureInfo("en-US").TextInfo;
var titleCaseStr = textInfo.ToTitleCase(status);
string result = titleCaseStr.Replace("_","").Replace(" ", "");
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.