public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }

            StringBuilder  sb    = new StringBuilder();
            SnakeCaseState state = SnakeCaseState.Start;

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == ' ')
                {
                    if (state != SnakeCaseState.Start)
                    {
                        state = SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(s[i]))
                {
                    switch (state)
                    {
                    case SnakeCaseState.Upper:
                        bool hasNext = (i + 1 < s.Length);
                        if (i > 0 && hasNext)
                        {
                            char nextChar = s[i + 1];
                            if (!char.IsUpper(nextChar) && nextChar != '_')
                            {
                                sb.Append('_');
                            }
                        }
                        break;

                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        sb.Append('_');
                        break;
                    }

                    char c;
#if !(DOTNET || PORTABLE)
                    c = char.ToLower(s[i], CultureInfo.InvariantCulture);
#else
                    c = char.ToLowerInvariant(s[i]);
#endif
                    sb.Append(c);

                    state = SnakeCaseState.Upper;
                }
                else if (s[i] == '_')
                {
                    sb.Append('_');
                    state = SnakeCaseState.Start;
                }
                else
                {
                    if (state == SnakeCaseState.NewWord)
                    {
                        sb.Append('_');
                    }

                    sb.Append(s[i]);
                    state = SnakeCaseState.Lower;
                }
            }

            return(sb.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将字符串转换为蛇形策略
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns></returns>
        public static string ToSnakeCase(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return(str);
            }

            StringBuilder  sb    = new StringBuilder();
            SnakeCaseState state = SnakeCaseState.Start;

            for (var i = 0; i < str.Length; i++)
            {
                if (str[i] == ' ')
                {
                    if (state != SnakeCaseState.Start)
                    {
                        state = SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(str[i]))
                {
                    switch (state)
                    {
                    case SnakeCaseState.Upper:
                        bool hasNext = (i + 1 < str.Length);
                        if (i > 0 && hasNext)
                        {
                            char nextChar = str[i + 1];
                            if (!char.IsUpper(nextChar) && nextChar != '_')
                            {
                                sb.Append('_');
                            }
                        }
                        break;

                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        sb.Append('_');
                        break;
                    }

                    sb.Append(char.ToLowerInvariant(str[i]));
                    state = SnakeCaseState.Upper;
                }
                else if (str[i] == '_')
                {
                    sb.Append('_');
                    state = SnakeCaseState.Start;
                }
                else
                {
                    if (state == SnakeCaseState.NewWord)
                    {
                        sb.Append('_');
                    }

                    sb.Append(str[i]);
                    state = SnakeCaseState.Lower;
                }
            }

            return(sb.ToString());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 如:AreYouOk转成are_you_ok
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }
            StringBuilder  stringBuilder  = new StringBuilder();
            SnakeCaseState snakeCaseState = SnakeCaseState.Start;

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == ' ')
                {
                    if (snakeCaseState != 0)
                    {
                        snakeCaseState = SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(s[i]))
                {
                    switch (snakeCaseState)
                    {
                    case SnakeCaseState.Upper:
                    {
                        bool flag = i + 1 < s.Length;
                        if (i > 0 && flag)
                        {
                            char c = s[i + 1];
                            if (!char.IsUpper(c) && c != '_')
                            {
                                stringBuilder.Append('_');
                            }
                        }
                        break;
                    }

                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        stringBuilder.Append('_');
                        break;
                    }
                    char value = char.ToLower(s[i], CultureInfo.InvariantCulture);
                    stringBuilder.Append(value);
                    snakeCaseState = SnakeCaseState.Upper;
                }
                else if (s[i] == '_')
                {
                    stringBuilder.Append('_');
                    snakeCaseState = SnakeCaseState.Start;
                }
                else
                {
                    if (snakeCaseState == SnakeCaseState.NewWord)
                    {
                        stringBuilder.Append('_');
                    }
                    stringBuilder.Append(s[i]);
                    snakeCaseState = SnakeCaseState.Lower;
                }
            }
            return(stringBuilder.ToString());
        }
        public string ToSnakeCaseNewtonsoftJson()
        {
            if (string.IsNullOrEmpty(name))
            {
                return(name);
            }

            StringBuilder  sb    = new StringBuilder();
            SnakeCaseState state = SnakeCaseState.Start;

            for (int i = 0; i < name.Length; i++)
            {
                if (name[i] == ' ')
                {
                    if (state != SnakeCaseState.Start)
                    {
                        state = SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(name[i]))
                {
                    switch (state)
                    {
                    case SnakeCaseState.Upper:
                        bool hasNext = (i + 1 < name.Length);
                        if (i > 0 && hasNext)
                        {
                            char nextChar = name[i + 1];
                            if (!char.IsUpper(nextChar) && nextChar != '_')
                            {
                                sb.Append('_');
                            }
                        }

                        break;

                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        sb.Append('_');
                        break;
                    }

                    char c;
#if HAVE_CHAR_TO_LOWER_WITH_CULTURE
                    c = char.ToLower(s[i], CultureInfo.InvariantCulture);
#else
                    c = char.ToLowerInvariant(name[i]);
#endif
                    sb.Append(c);

                    state = SnakeCaseState.Upper;
                }
                else if (name[i] == '_')
                {
                    sb.Append('_');
                    state = SnakeCaseState.Start;
                }
                else
                {
                    if (state == SnakeCaseState.NewWord)
                    {
                        sb.Append('_');
                    }

                    sb.Append(name[i]);
                    state = SnakeCaseState.Lower;
                }
            }

            return(sb.ToString());
        }
Ejemplo n.º 5
0
        public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }
            StringBuilder  builder = new StringBuilder();
            SnakeCaseState start   = SnakeCaseState.Start;

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == ' ')
                {
                    if (start != SnakeCaseState.Start)
                    {
                        start = SnakeCaseState.NewWord;
                    }
                    continue;
                }
                if (char.IsUpper(s[i]))
                {
                    switch (start)
                    {
                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        builder.Append('_');
                        break;

                    case SnakeCaseState.Upper:
                    {
                        bool flag = (i + 1) < s.Length;
                        if ((i > 0) & flag)
                        {
                            char c = s[i + 1];
                            if (!char.IsUpper(c) && (c != '_'))
                            {
                                builder.Append('_');
                            }
                        }
                        break;
                    }
                    }
                    char ch2 = char.ToLower(s[i], CultureInfo.InvariantCulture);
                    builder.Append(ch2);
                    start = SnakeCaseState.Upper;
                    continue;
                }
                if (s[i] == '_')
                {
                    builder.Append('_');
                    start = SnakeCaseState.Start;
                }
                else
                {
                    if (start == SnakeCaseState.NewWord)
                    {
                        builder.Append('_');
                    }
                    builder.Append(s[i]);
                    start = SnakeCaseState.Lower;
                }
            }
            return(builder.ToString());
        }
Ejemplo n.º 6
0
        public static string ToSnakeCase(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return(s);
            }

            var            sb    = StringBuilderCache.Acquire();
            SnakeCaseState state = SnakeCaseState.Start;

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] == ' ')
                {
                    if (state != SnakeCaseState.Start)
                    {
                        state = SnakeCaseState.NewWord;
                    }
                }
                else if (char.IsUpper(s[i]))
                {
                    switch (state)
                    {
                    case SnakeCaseState.Upper:
                        bool hasNext = (i + 1 < s.Length);
                        if (i > 0 && hasNext)
                        {
                            char nextChar = s[i + 1];
                            if (!char.IsUpper(nextChar) && nextChar != '_')
                            {
                                sb.Append('_');
                            }
                        }
                        break;

                    case SnakeCaseState.Lower:
                    case SnakeCaseState.NewWord:
                        sb.Append('_');
                        break;
                    }

                    char c;
#if HAVE_CHAR_TO_LOWER_WITH_CULTURE
                    c = char.ToLower(s[i], CultureInfo.InvariantCulture);
#else
                    c = char.ToLowerInvariant(s[i]);
#endif
                    sb.Append(c);

                    state = SnakeCaseState.Upper;
                }
                else if (s[i] == '_')
                {
                    sb.Append('_');
                    state = SnakeCaseState.Start;
                }
                else
                {
                    if (state == SnakeCaseState.NewWord)
                    {
                        sb.Append('_');
                    }

                    sb.Append(s[i]);
                    state = SnakeCaseState.Lower;
                }
            }

            return(StringBuilderCache.GetStringAndRelease(sb));
        }