我有一个包含文本的变量,如:如何将PascalCase转换为分词?
ShowSummary
ShowDetails
AccountDetails
有没有在C#一个简单的方法函数/方法,我可以适用于这些变量产生:
"Show Summary"
"Show Details"
"Account Details"
我想知道的延伸方法,但我从来没有编码一个,我不知道从哪里开始。
我有一个包含文本的变量,如:如何将PascalCase转换为分词?
ShowSummary
ShowDetails
AccountDetails
有没有在C#一个简单的方法函数/方法,我可以适用于这些变量产生:
"Show Summary"
"Show Details"
"Account Details"
我想知道的延伸方法,但我从来没有编码一个,我不知道从哪里开始。
在我目前工作的应用程序,我们有一个基于委托分裂扩展方法。它看起来像这样:
public static string Split(this string target, Func<char, char, bool> shouldSplit, string splitFiller = " ")
{
if (target == null)
throw new ArgumentNullException("target");
if (shouldSplit == null)
throw new ArgumentNullException("shouldSplit");
if (String.IsNullOrEmpty(splitFiller))
throw new ArgumentNullException("splitFiller");
int targetLength = target.Length;
// We know the resulting string is going to be atleast the length of target
StringBuilder result = new StringBuilder(targetLength);
result.Append(target[0]);
// Loop from the second character to the last character.
for (int i = 1; i < targetLength; ++i)
{
char firstChar = target[i - 1];
char secondChar = target[i];
if (shouldSplit(firstChar, secondChar))
{
// If a split should be performed add in the filler
result.Append(splitFiller);
}
result.Append(secondChar);
}
return result.ToString();
}
则可以使用它,如下所示:
string showSummary = "ShowSummary";
string spacedString = showSummary.Split((c1, c2) => Char.IsLower(c1) && Char.IsUpper(c2));
这允许您分割在两个char
S之间的任何条件,并插入您选择的填料(默认的空间)。
最好的方法是迭代字符串中的每个字符。检查字符是否大写。如果是这样,请在它之前插入一个空格字符。否则,转到下一个字符。
此外,理想情况下,从第二个字符开始,以便在第一个字符之前不插入空格。
尝试这样的事情
var word = "AccountDetails";
word = string.Join(string.Empty,word
.Select(c => new string(c, 1)).Select(c => c[0] < 'Z' ? " " + c : c)).Trim();
'CameCase'是不是骆驼情况下! 'camelCase'是。 – abatishchev
这就是所谓的PascalCase – kol
阿肖克有一个很好的答复。请注意camelCase和PascalCase之间的区别(http://cplus.about.com/od/learnc/ss/csharpclasses_5.htm) –