Asp.net “转换”的函数;骆驼箱“;在文本与文本之间键入空格?ie:HelloWorld-->;你好,世界

Asp.net “转换”的函数;骆驼箱“;在文本与文本之间键入空格?ie:HelloWorld-->;你好,世界,asp.net,vb.net,Asp.net,Vb.net,任何人都知道可以转换的高效函数,例如: HelloWorld-->你好世界 helloWorld-->你好世界 你好世界-->你好世界 你好世界-->你好世界 能够处理所有这些情况将是一件好事 最好是在VB.Net或C#中。听起来很有趣,所以我对其进行了编码。最重要的部分是查看此网站以获取更多文档 private static string BreakUpCamelCase(string s) { MatchCollection MC = Regex.Matches(s, @"[0-9a

任何人都知道可以转换的高效函数,例如:
HelloWorld-->你好世界
helloWorld-->你好世界
你好世界-->你好世界
你好世界-->你好世界

能够处理所有这些情况将是一件好事


最好是在VB.Net或C#中。

听起来很有趣,所以我对其进行了编码。最重要的部分是查看此网站以获取更多文档

private static string BreakUpCamelCase(string s)
{
    MatchCollection MC = Regex.Matches(s, @"[0-9a-z][A-Z]");
    int LastMatch = 0;
    System.Text.StringBuilder SB = new StringBuilder();
    foreach (Match M in MC)
    {
        SB.AppendFormat("{0} ", s.Substring(LastMatch, M.Index + 1 - LastMatch));
        LastMatch = M.Index + 1;
    }
    if (LastMatch < s.Length)
    {
        SB.AppendFormat("{0} ", s.Substring(LastMatch));
    }
    return SB.ToString();
}
私有静态字符串分解CAMELCASE(字符串s)
{
MatchCollection MC=Regex.Matches(s,@“[0-9a-z][A-z]”);
int LastMatch=0;
System.Text.StringBuilder SB=新的StringBuilder();
foreach(在MC中匹配M)
{
SB.AppendFormat(“{0}”,s.Substring(LastMatch,M.Index+1-LastMatch));
LastMatch=M.索引+1;
}
if(LastMatch
我不知道这是否是最有效的方法。但这种方法效果很好:

编辑1:我在评论中加入了Char.IsUpper建议

编辑2:在注释中包含了另一个建议:ToCharArray是多余的,因为字符串也将可枚举操作实现为字符,即foreach(输入中的字符)

编辑3:我使用过StringBuilder,就像@Dan评论的那样

    public string CamelCaseToTextWithSpaces(string input)
    {


        StringBuilder output = new StringBuilder();

        input = input.Replace("_", "");

        foreach (char character in input)
        {
            if (char.IsUpper(character))
            { 
                output.Append(' ');             
            }

            if (output.Length == 0)
            {
                // The first letter must be always UpperCase
                output.Append(Char.ToUpper(character));
            }
            else
            {
                output.Append(character);
            }                
        }

        return output.ToString().Trim();
    }

您可能还需要考虑其他一些可能性,例如,您可能不想在缩写/首字母缩略词中添加空格

我建议使用:

Private CamelCaseConverter As Regex = New Regex("(?<char1>[0-9a-z])(?<char2>[A-Z])", RegexOptions.Compiled + RegexOptions.CultureInvariant)

Public Function CamelCaseToWords(CamelCaseString As String) As String
 Return CamelCaseConverter.Replace(CamelCaseString, "${char1} ${char2}")
End Function

'Gives:
'CamelCase => Camel Case
'PIN => PIN
Private CamelCaseConverter As Regex=New Regex((?[0-9a-z])(?[A-z]),RegexOptions.Compiled+RegexOptions.CultureInvariant)
公共函数CamelCaseToWords(CamelCaseString作为字符串)作为字符串
返回CamelCaseConverter.Replace(CamelCaseString,${char1}${char2})
端函数
“提供:
'CamelCase=>CamelCase
'PIN=>PIN

它不使用大写字母作为第一个单词的第一个字母,但是你可以查看其他示例来了解如何使用它,或者有人可以想出一种聪明的正则表达式方法。

我看到你在囤积标点符号。一旦其他人用完了他们所有的标点符号,你就会富有了!聪明…很好的修改,顺便说一句,ToCharArray是多余的,因为字符串也实现了可枚举的操作作为字符,例如,
foreach(输入中的字符)
。我之所以观看这个线程,是因为当有人问我需要代码中的“pascal case to human readable text”片段时。我爱你!!:-)@Javier:您可能应该为此使用
StringBuilder
类;每次您有
output+=something
时,您都在创建一个全新的字符串对象,而
StringBuilder
具有附加到自身的功能。呵呵,耶:-)也谢谢@Dan。。。。尽管刚刚阅读了一些内容,但您可能希望避免使用Compiled Regex标志,除非您对Regex进行了大量调用。如果您是.NET新手,上述代码要求您导入System.Text.RegularExpressions。由于示例是VB.NET,您将使用:Imports System.Text.RegularExpressions