From ca88687f3de2912ee0980d9942fcefc650cbb0d4 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Sat, 22 Jan 2022 18:55:41 +0800 Subject: [PATCH] feat: add UpperFirst func --- strutil/string.go | 12 ++++++++++++ strutil/string_test.go | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/strutil/string.go b/strutil/string.go index f3b1094..268099d 100644 --- a/strutil/string.go +++ b/strutil/string.go @@ -54,6 +54,18 @@ func Capitalize(s string) string { return string(out) } +// UpperFirst converts the first character of string to upper case. +func UpperFirst(s string) string { + if len(s) == 0 { + return "" + } + + r, size := utf8.DecodeRuneInString(s) + r = unicode.ToUpper(r) + + return string(r) + s[size:] +} + // LowerFirst converts the first character of string to lower case. func LowerFirst(s string) string { if len(s) == 0 { diff --git a/strutil/string_test.go b/strutil/string_test.go index ac7e35c..16432b7 100644 --- a/strutil/string_test.go +++ b/strutil/string_test.go @@ -50,6 +50,17 @@ func TestSnakeCase(t *testing.T) { assert.NotEqual("foo-bar", SnakeCase("foo_Bar")) } +func TestUpperFirst(t *testing.T) { + assert := internal.NewAssert(t, "TestLowerFirst") + + assert.Equal("Foo", UpperFirst("foo")) + assert.Equal("BAR", UpperFirst("bAR")) + assert.Equal("FOo", UpperFirst("FOo")) + assert.Equal("FOoċ¤§", UpperFirst("fOoċ¤§")) + + assert.NotEqual("Bar", UpperFirst("BAR")) +} + func TestLowerFirst(t *testing.T) { assert := internal.NewAssert(t, "TestLowerFirst")