14

我需要一个函数来接受一个字符串和“pascal case”。新单词开始的唯一指示符是下划线。以下是一些需要清理的示例字符串:

  1. price_old => 应该是 PriceOld
  2. rank_old => 应该是 RankOld

我开始研究一个使第一个字符大写的函数:

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”下划线右侧的字符。

此外,关于如何对没有任何指示符(如下划线)的字符串进行帕斯卡大小写的任何想法。例如:

  1. 公司来源
  2. 金融趋势
  3. 会计变更类型

这里的主要挑战是确定一个词在哪里结束,另一个词从哪里开始。我想我需要某种查找字典来确定新词从哪里开始?我们那里有图书馆可以做这种事情吗?

谢谢,

保罗

4

6 回答 6

23

您可以使用TextInfo.ToTitleCase方法,然后删除“_”字符。

所以,使用我得到的扩展方法:

http://theburningmonk.com/2010/08/dotnet-tips-string-totitlecase-extension-methods

你可以这样做:

var s = "price_old";
s.ToTitleCase().Replace("_", string.Empty);
于 2010-08-02T09:53:05.377 回答
11

好吧,第一件事很简单:

string.Join("", "price_old".Split(new [] { '_' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Substring(0, 1).ToUpper() + s.Substring(1)).ToArray());

返回PriceOld

第二件事要困难得多。As companysourcecould be CompanySourceor 也许CompanysOurce, 可以自动化,但非常错误。您将需要一本英文词典,并猜测(嗯,我的意思是很多)哪个单词组合是正确的。

于 2010-08-02T09:52:09.513 回答
4

试试这个:

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
于 2010-08-02T09:56:36.007 回答
2

带下划线:

s = Regex.Replace(s, @"(?:^|_)([a-z])",
      m => m.Groups[1].Value.ToUpper());

不带下划线:

你自己在那里。但是继续搜索;如果以前没有人这样做,我会感到惊讶。

于 2010-08-02T10:37:06.537 回答
0

对于拆分连接词的第二个问题,您可以使用我们最好的朋友 Google & Co。如果您的连接输入由常用的英文单词组成,则搜索引擎将单个单词作为替代搜索查询的命中率很高

如果您输入示例输入,Google 和 Bing 会建议以下内容:

original             | Google                | Bing
=====================================================================
companysource        | company source        | company source 
financialtrend       | financial trend       | financial trend
accountingchangetype | accounting changetype | accounting change type

这个例子

为此编写一个小屏幕刮板应该相当容易。

于 2010-08-02T10:56:34.567 回答
0

对于那些需要非正则表达式解决方案的人

 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;
        }
于 2016-12-22T15:22:20.453 回答