diff --git a/docs/strutil.md b/docs/strutil.md index 06d342f..c086bfa 100644 --- a/docs/strutil.md +++ b/docs/strutil.md @@ -57,6 +57,7 @@ import ( - [Trim](#Trim) - [SplitAndTrim](#SplitAndTrim) - [HideString](#HideString) +- [RemoveWhiteSpace](#RemoveWhiteSpace)
@@ -857,13 +858,13 @@ import ( func main() { result1 := strutil.StringToBytes("abc") - result2 := reflect.DeepEqual(result1, []byte{'a', 'b', 'c'}) + result2 := reflect.DeepEqual(result1, []byte{'a', 'b', 'c'}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // [97 98 99] - // true + fmt.Println(result1) + fmt.Println(result2) + // Output: + // [97 98 99] + // true } ``` @@ -887,11 +888,11 @@ import ( func main() { bytes := []byte{'a', 'b', 'c'} - result := strutil.BytesToString(bytes) + result := strutil.BytesToString(bytes) - fmt.Println(result) - // Output: - // abc + fmt.Println(result) + // Output: + // abc } ``` @@ -915,16 +916,16 @@ import ( func main() { result1 := strutil.IsBlank("") - result2 := strutil.IsBlank("\t\v\f\n") - result3 := strutil.IsBlank(" 中文") + result2 := strutil.IsBlank("\t\v\f\n") + result3 := strutil.IsBlank(" 中文") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - // Output: - // true - // true - // false + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + // Output: + // true + // true + // false } ``` @@ -948,13 +949,13 @@ import ( func main() { result1 := strutil.HasPrefixAny("foo bar", []string{"fo", "xyz", "hello"}) - result2 := strutil.HasPrefixAny("foo bar", []string{"oom", "world"}) + result2 := strutil.HasPrefixAny("foo bar", []string{"oom", "world"}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // true - // false + fmt.Println(result1) + fmt.Println(result2) + // Output: + // true + // false } ``` @@ -978,13 +979,13 @@ import ( func main() { result1 := strutil.HasSuffixAny("foo bar", []string{"bar", "xyz", "hello"}) - result2 := strutil.HasSuffixAny("foo bar", []string{"oom", "world"}) + result2 := strutil.HasSuffixAny("foo bar", []string{"oom", "world"}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // true - // false + fmt.Println(result1) + fmt.Println(result2) + // Output: + // true + // false } ``` @@ -1009,23 +1010,23 @@ import ( func main() { str := "foo bar hello world" - result1 := strutil.IndexOffset(str, "o", 5) - result2 := strutil.IndexOffset(str, "o", 0) - result3 := strutil.IndexOffset(str, "d", len(str)-1) - result4 := strutil.IndexOffset(str, "d", len(str)) - result5 := strutil.IndexOffset(str, "f", -1) + result1 := strutil.IndexOffset(str, "o", 5) + result2 := strutil.IndexOffset(str, "o", 0) + result3 := strutil.IndexOffset(str, "d", len(str)-1) + result4 := strutil.IndexOffset(str, "d", len(str)) + result5 := strutil.IndexOffset(str, "f", -1) - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - fmt.Println(result4) - fmt.Println(result5) - // Output: - // 12 - // 1 - // 18 - // -1 - // -1 + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + fmt.Println(result5) + // Output: + // 12 + // 1 + // 18 + // -1 + // -1 } ``` @@ -1049,16 +1050,16 @@ import ( func main() { str := "ac ab ab ac" - replaces := map[string]string{ - "a": "1", - "b": "2", - } + replaces := map[string]string{ + "a": "1", + "b": "2", + } - result := strutil.ReplaceWithMap(str, replaces) + result := strutil.ReplaceWithMap(str, replaces) - fmt.Println(result) - // Output: - // 1c 12 12 1c + fmt.Println(result) + // Output: + // 1c 12 12 1c } ``` @@ -1083,19 +1084,19 @@ import ( func main() { result1 := strutil.Trim("\nabcd") - str := "$ ab cd $ " + str := "$ ab cd $ " - result2 := strutil.Trim(str) - result3 := strutil.Trim(str, "$") + result2 := strutil.Trim(str) + result3 := strutil.Trim(str, "$") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) - // Output: - // abcd - // $ ab cd $ - // ab cd + // Output: + // abcd + // $ ab cd $ + // ab cd } ``` @@ -1120,15 +1121,15 @@ import ( func main() { str := " a,b, c,d,$1 " - result1 := strutil.SplitAndTrim(str, ",") - result2 := strutil.SplitAndTrim(str, ",", "$") + result1 := strutil.SplitAndTrim(str, ",") + result2 := strutil.SplitAndTrim(str, ",", "$") - fmt.Println(result1) - fmt.Println(result2) + fmt.Println(result1) + fmt.Println(result2) - // Output: - // [a b c d $1] - // [a b c d 1] + // Output: + // [a b c d $1] + // [a b c d 1] } ``` @@ -1153,21 +1154,21 @@ import ( func main() { str := "13242658976" - result1 := strutil.HideString(str, 3, 3, "*") - result2 := strutil.HideString(str, 3, 4, "*") - result3 := strutil.HideString(str, 3, 7, "*") - result4 := strutil.HideString(str, 7, 11, "*") + result1 := strutil.HideString(str, 3, 3, "*") + result2 := strutil.HideString(str, 3, 4, "*") + result3 := strutil.HideString(str, 3, 7, "*") + result4 := strutil.HideString(str, 7, 11, "*") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - fmt.Println(result4) + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) - // Output: - // 13242658976 - // 132*2658976 - // 132****8976 - // 1324265**** + // Output: + // 13242658976 + // 132*2658976 + // 132****8976 + // 1324265**** } ``` @@ -1240,3 +1241,36 @@ func main() { // false } ``` + +### RemoveWhiteSpace + +Remove whitespace characters from a string. when set repalceAll is true removes all whitespace, false only replaces consecutive whitespace characters with one space.
+ +Signature: + +```go +func RemoveWhiteSpace(str string, repalceAll bool) string +``` + +Example: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/strutil" +) + +func main() { + str := " hello \r\n \t world" + + result1 := strutil.RemoveWhiteSpace(str, true) + result2 := strutil.RemoveWhiteSpace(str, false) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // helloworld + // hello world +} +``` diff --git a/docs/strutil_zh-CN.md b/docs/strutil_zh-CN.md index c71fb75..de90f24 100644 --- a/docs/strutil_zh-CN.md +++ b/docs/strutil_zh-CN.md @@ -57,6 +57,8 @@ import ( - [Trim](#Trim) - [SplitAndTrim](#SplitAndTrim) - [HideString](#HideString) +- [RemoveWhiteSpace](#RemoveWhiteSpace) + @@ -888,13 +890,13 @@ import ( func main() { result1 := strutil.StringToBytes("abc") - result2 := reflect.DeepEqual(result1, []byte{'a', 'b', 'c'}) + result2 := reflect.DeepEqual(result1, []byte{'a', 'b', 'c'}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // [97 98 99] - // true + fmt.Println(result1) + fmt.Println(result2) + // Output: + // [97 98 99] + // true } ``` @@ -918,11 +920,11 @@ import ( func main() { bytes := []byte{'a', 'b', 'c'} - result := strutil.BytesToString(bytes) + result := strutil.BytesToString(bytes) - fmt.Println(result) - // Output: - // abc + fmt.Println(result) + // Output: + // abc } ``` @@ -946,16 +948,16 @@ import ( func main() { result1 := strutil.IsBlank("") - result2 := strutil.IsBlank("\t\v\f\n") - result3 := strutil.IsBlank(" 中文") + result2 := strutil.IsBlank("\t\v\f\n") + result3 := strutil.IsBlank(" 中文") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - // Output: - // true - // true - // false + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + // Output: + // true + // true + // false } ``` @@ -979,13 +981,13 @@ import ( func main() { result1 := strutil.HasPrefixAny("foo bar", []string{"fo", "xyz", "hello"}) - result2 := strutil.HasPrefixAny("foo bar", []string{"oom", "world"}) + result2 := strutil.HasPrefixAny("foo bar", []string{"oom", "world"}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // true - // false + fmt.Println(result1) + fmt.Println(result2) + // Output: + // true + // false } ``` @@ -1009,13 +1011,13 @@ import ( func main() { result1 := strutil.HasSuffixAny("foo bar", []string{"bar", "xyz", "hello"}) - result2 := strutil.HasSuffixAny("foo bar", []string{"oom", "world"}) + result2 := strutil.HasSuffixAny("foo bar", []string{"oom", "world"}) - fmt.Println(result1) - fmt.Println(result2) - // Output: - // true - // false + fmt.Println(result1) + fmt.Println(result2) + // Output: + // true + // false } ``` @@ -1040,23 +1042,23 @@ import ( func main() { str := "foo bar hello world" - result1 := strutil.IndexOffset(str, "o", 5) - result2 := strutil.IndexOffset(str, "o", 0) - result3 := strutil.IndexOffset(str, "d", len(str)-1) - result4 := strutil.IndexOffset(str, "d", len(str)) - result5 := strutil.IndexOffset(str, "f", -1) + result1 := strutil.IndexOffset(str, "o", 5) + result2 := strutil.IndexOffset(str, "o", 0) + result3 := strutil.IndexOffset(str, "d", len(str)-1) + result4 := strutil.IndexOffset(str, "d", len(str)) + result5 := strutil.IndexOffset(str, "f", -1) - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - fmt.Println(result4) - fmt.Println(result5) - // Output: - // 12 - // 1 - // 18 - // -1 - // -1 + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) + fmt.Println(result5) + // Output: + // 12 + // 1 + // 18 + // -1 + // -1 } ``` @@ -1080,16 +1082,16 @@ import ( func main() { str := "ac ab ab ac" - replaces := map[string]string{ - "a": "1", - "b": "2", - } + replaces := map[string]string{ + "a": "1", + "b": "2", + } - result := strutil.ReplaceWithMap(str, replaces) + result := strutil.ReplaceWithMap(str, replaces) - fmt.Println(result) - // Output: - // 1c 12 12 1c + fmt.Println(result) + // Output: + // 1c 12 12 1c } ``` @@ -1114,19 +1116,19 @@ import ( func main() { result1 := strutil.Trim("\nabcd") - str := "$ ab cd $ " + str := "$ ab cd $ " - result2 := strutil.Trim(str) - result3 := strutil.Trim(str, "$") + result2 := strutil.Trim(str) + result3 := strutil.Trim(str, "$") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) - // Output: - // abcd - // $ ab cd $ - // ab cd + // Output: + // abcd + // $ ab cd $ + // ab cd } ``` @@ -1152,15 +1154,15 @@ import ( func main() { str := " a,b, c,d,$1 " - result1 := strutil.SplitAndTrim(str, ",") - result2 := strutil.SplitAndTrim(str, ",", "$") + result1 := strutil.SplitAndTrim(str, ",") + result2 := strutil.SplitAndTrim(str, ",", "$") - fmt.Println(result1) - fmt.Println(result2) + fmt.Println(result1) + fmt.Println(result2) - // Output: - // [a b c d $1] - // [a b c d 1] + // Output: + // [a b c d $1] + // [a b c d 1] } ``` @@ -1186,21 +1188,21 @@ import ( func main() { str := "13242658976" - result1 := strutil.HideString(str, 3, 3, "*") - result2 := strutil.HideString(str, 3, 4, "*") - result3 := strutil.HideString(str, 3, 7, "*") - result4 := strutil.HideString(str, 7, 11, "*") + result1 := strutil.HideString(str, 3, 3, "*") + result2 := strutil.HideString(str, 3, 4, "*") + result3 := strutil.HideString(str, 3, 7, "*") + result4 := strutil.HideString(str, 7, 11, "*") - fmt.Println(result1) - fmt.Println(result2) - fmt.Println(result3) - fmt.Println(result4) + fmt.Println(result1) + fmt.Println(result2) + fmt.Println(result3) + fmt.Println(result4) - // Output: - // 13242658976 - // 132*2658976 - // 132****8976 - // 1324265**** + // Output: + // 13242658976 + // 132*2658976 + // 132****8976 + // 1324265**** } ``` @@ -1272,3 +1274,36 @@ func main() { // false } ``` + +### RemoveWhiteSpace + +删除字符串中的空格,当设置repalceAll为true时,删除全部空格,为false时,替换多个空格为1个空格。
+ +函数签名: + +```go +func RemoveWhiteSpace(str string, repalceAll bool) string +``` + +示例: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/strutil" +) + +func main() { + str := " hello \r\n \t world" + + result1 := strutil.RemoveWhiteSpace(str, true) + result2 := strutil.RemoveWhiteSpace(str, false) + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // helloworld + // hello world +} +``` diff --git a/strutil/string.go b/strutil/string.go index a6f4a93..a4dcadd 100644 --- a/strutil/string.go +++ b/strutil/string.go @@ -6,6 +6,7 @@ package strutil import ( "reflect" + "regexp" "strings" "unicode" "unicode/utf8" @@ -503,3 +504,21 @@ 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. +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_test.go b/strutil/string_test.go index ee52cde..209f1b9 100644 --- a/strutil/string_test.go +++ b/strutil/string_test.go @@ -455,3 +455,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)) +}