From 9b829aa695b17a2fc693e019f5656723b7abf76c Mon Sep 17 00:00:00 2001 From: dudaodong Date: Thu, 8 Jun 2023 16:47:31 +0800 Subject: [PATCH] feat: add RemoveWhiteSpace --- strutil/string.go | 20 ++++++++++++++++++++ strutil/string_example_test.go | 14 ++++++++++++++ strutil/string_test.go | 10 ++++++++++ 3 files changed, 44 insertions(+) diff --git a/strutil/string.go b/strutil/string.go index 0dd2b10..51c70bc 100644 --- a/strutil/string.go +++ b/strutil/string.go @@ -5,6 +5,7 @@ package strutil import ( "reflect" + "regexp" "strings" "unicode" "unicode/utf8" @@ -552,3 +553,22 @@ func ContainsAny(str string, substrs []string) bool { return false } + +var ( + whitespaceRegexMatcher *regexp.Regexp = regexp.MustCompile(`\s`) + mutiWhitespaceRegexMatcher *regexp.Regexp = regexp.MustCompile(`[[:space:]]{2,}|[\s\p{Zs}]{2,}`) +) + +// RemoveWhiteSpace remove whitespace characters from a string. +// when set repalceAll is true removes all whitespace, false only replaces consecutive whitespace characters with one space. +// Play: todo +func RemoveWhiteSpace(str string, repalceAll bool) string { + if repalceAll && str != "" { + return strings.Join(strings.Fields(str), "") + } else if str != "" { + str = mutiWhitespaceRegexMatcher.ReplaceAllString(str, " ") + str = whitespaceRegexMatcher.ReplaceAllString(str, " ") + } + + return strings.TrimSpace(str) +} diff --git a/strutil/string_example_test.go b/strutil/string_example_test.go index 51bae93..310fac7 100644 --- a/strutil/string_example_test.go +++ b/strutil/string_example_test.go @@ -619,3 +619,17 @@ func ExampleContainsAny() { // true // false } + +func ExampleRemoveWhiteSpace() { + str := " hello \r\n \t world" + + result1 := RemoveWhiteSpace(str, true) + result2 := RemoveWhiteSpace(str, false) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // helloworld + // hello world +} diff --git a/strutil/string_test.go b/strutil/string_test.go index 26c4994..aa71c16 100644 --- a/strutil/string_test.go +++ b/strutil/string_test.go @@ -466,3 +466,13 @@ func TestContainsAny(t *testing.T) { assert.Equal(true, ContainsAny("hello world", []string{"hello", "abc"})) assert.Equal(false, ContainsAny("hello world", []string{"123", "abc"})) } + +func TestRemoveWhiteSpace(t *testing.T) { + assert := internal.NewAssert(t, "TestRemoveWhiteSpace") + + str := " hello \r\n \t world" + + assert.Equal("", RemoveWhiteSpace("", true)) + assert.Equal("helloworld", RemoveWhiteSpace(str, true)) + assert.Equal("hello world", RemoveWhiteSpace(str, false)) +}