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")