Golang : Individual and total number of words counter example
Problem:
You need to count the unique instances of words and the total number of words in a given string. For counting each unique occurrences of a word, you prefer to strip the word of any delimiter such as exclamation or question marks and return the result as a map.
Solution:
This code example below is self-explanatory. Happy coding!
package main
import (
"fmt"
"strings"
)
const delim = "?!.;,*"
func isDelim(c string) bool {
if strings.Contains(delim, c) {
return true
}
return false
}
func cleanDelimiter(input string) string {
size := len(input)
temp := ""
var prevChar string
for i := 0; i < size; i++ {
str := string(input[i]) // convert to string for easier operation
if (str == " " && prevChar != " ") || !isDelim(str) {
temp += str
prevChar = str
} else if prevChar != " " && isDelim(str) {
temp += ""
}
}
return temp
}
func SingleWordCount(s string, uniqueSensitive bool) map[string]int {
strSlice := strings.Fields(cleanDelimiter(s))
result := make(map[string]int)
if uniqueSensitive {
for _, str := range strSlice {
result[str]++
}
} else {
for _, str := range strSlice {
result[strings.ToLower(str)]++
}
}
return result
}
func TotalWordCount(s string) int {
strSlice := strings.Fields(cleanDelimiter(s))
return len(strSlice)
}
func main() {
str := "Hello fri3nd, you're looking good today!"
fmt.Println("======================================================")
fmt.Println(str)
fmt.Println("Count by individual word : ", SingleWordCount(str, true))
fmt.Println("Total words : ", TotalWordCount(str))
str = "Hello hello HELLo hellO"
fmt.Println("======================================================")
fmt.Println(str)
fmt.Println("Count by individual word : ", SingleWordCount(str, true))
fmt.Println("Total words : ", TotalWordCount(str))
// TREAT lower and upper case as the same
str = "Hello? hello!! HELLo?? hellO!"
fmt.Println("======================================================")
fmt.Println(str)
fmt.Println("Count by individual word : ", SingleWordCount(str, false)) // set to false
fmt.Println("Total words : ", TotalWordCount(str))
}
Output:
======================================================
Hello fri3nd, you're looking good today!
Count by individual word : map[today:1 Hello:1 fri3nd:1 you're:1 looking:1 good:1]
Total words : 6
======================================================
Hello hello HELLo hellO
Count by individual word : map[Hello:1 hello:1 HELLo:1 hellO:1]
Total words : 4
======================================================
Hello hello HELLo hellO
Count by individual word : map[hello:4]
Total words : 4
See also : Golang : Count number of runes in string
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+8.9k Golang : io.Reader causing panic: runtime error: invalid memory address or nil pointer dereference
+6.3k CodeIgniter : form input set_value cause " to become & quot
+10.2k Golang : Embed secret text string into binary(executable) file
+7.3k Golang : Process json data with Jason package
+6.9k Golang : Gargish-English language translator
+10.3k Golang : Generate 403 Forbidden to protect a page or prevent indexing by search engine
+7.6k Golang : get the current working directory of a running program
+7.4k Golang : Get YouTube playlist
+8.2k Golang : Implementing class(object-oriented programming style)
+21.3k Golang : How to read float value from standard input ?
+14.8k Golang : Basic authentication with .htpasswd file
+6.4k Golang : Convert an executable file into []byte example