代码之家  ›  专栏  ›  技术社区  ›  tbone

函数将“camel case”类型的文本转换为中间有空格的文本?ie:你好世界-->你好世界

  •  2
  • tbone  · 技术社区  · 14 年前



    地狱世界-->你好,世界

    能处理好所有这些情况就太好了。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Javier    14 年前

    我不知道这是不是最有效的方法。但这种方法效果很好:

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

    编辑2: 在评论中包括另一项建议: ToCharArray是多余的,因为string也将可枚举操作实现为char,即foreach(输入中的char character)

        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();
        }
    
        2
  •  1
  •   almcnicoll    12 年前

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

    我建议使用:

    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
    

        3
  •  0
  •   rerun    14 年前

    听起来很有趣,所以我把它编码了最重要的部分是 regex

    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();
    }