From 95a5f6449334f67d835fe176e361f0745f1a0961 Mon Sep 17 00:00:00 2001 From: Kevin Wan Date: Sun, 20 Nov 2022 17:41:39 +0800 Subject: [PATCH] feat: add stringx.ToCamelCase (#2622) --- core/stringx/strings.go | 10 +++++++ core/stringx/strings_test.go | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/core/stringx/strings.go b/core/stringx/strings.go index c0c4510c..155c8b3e 100644 --- a/core/stringx/strings.go +++ b/core/stringx/strings.go @@ -2,6 +2,7 @@ package stringx import ( "errors" + "unicode" "github.com/zeromicro/go-zero/core/lang" ) @@ -168,6 +169,15 @@ func TakeWithPriority(fns ...func() string) string { return "" } +// ToCamelCase returns the string that converts the first letter to lowercase. +func ToCamelCase(s string) string { + for i, v := range s { + return string(unicode.ToLower(v)) + s[i+1:] + } + + return "" +} + // Union merges the strings in first and second. func Union(first, second []string) []string { set := make(map[string]lang.PlaceholderType) diff --git a/core/stringx/strings_test.go b/core/stringx/strings_test.go index 6ef8755e..2caffd3e 100644 --- a/core/stringx/strings_test.go +++ b/core/stringx/strings_test.go @@ -396,6 +396,61 @@ func TestTakeWithPriority(t *testing.T) { } } +func TestToCamelCase(t *testing.T) { + tests := []struct { + input string + expect string + }{ + { + input: "", + expect: "", + }, + { + input: "A", + expect: "a", + }, + { + input: "a", + expect: "a", + }, + { + input: "hello_world", + expect: "hello_world", + }, + { + input: "Hello_world", + expect: "hello_world", + }, + { + input: "hello_World", + expect: "hello_World", + }, + { + input: "helloWorld", + expect: "helloWorld", + }, + { + input: "HelloWorld", + expect: "helloWorld", + }, + { + input: "hello World", + expect: "hello World", + }, + { + input: "Hello World", + expect: "hello World", + }, + } + + for _, test := range tests { + test := test + t.Run(test.input, func(t *testing.T) { + assert.Equal(t, test.expect, ToCamelCase(test.input)) + }) + } +} + func TestUnion(t *testing.T) { first := []string{ "one",