-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgoling.go
248 lines (190 loc) · 5.86 KB
/
goling.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/*
Author: Gyu-Ho Lee
Update: 09/29/2013
Description: Source Code for goling package.
*/
package goling
import (
"strings"
"regexp"
"strconv"
)
func Clean_up(input_str string) string {
// compile regular expression
// to match 2-or-more-than-2 whitespaces
var validID = regexp.MustCompile(`\s{2,}`)
var temp_str string = validID.ReplaceAllString(input_str, " ")
var temp_arr []string = strings.Split(temp_str, " ")
// pop off the last unnecessary character
if temp_arr[0] == "" || temp_arr[0] == " " {
temp_arr = temp_arr[1:]
}
// delete the first unnessary character
if temp_arr[len(temp_arr)-1] == "" || temp_arr[len(temp_arr)-1] == " " {
temp_arr = temp_arr[:len(temp_arr)-1]
}
// return in string format
return strings.Join(temp_arr, " ")
}
func All_Tab_into_single_space(input_str string) string {
// to take any tab chracters: single tab, double tabs, ...
var validID = regexp.MustCompile(`\t{1,}`)
return validID.ReplaceAllString(input_str, " ")
}
func All_Space_into_single_tab(input_str string) string {
// to take any whitespace characters: single whitespace, doulbe _, ...
var validID = regexp.MustCompile(`\s{1,}`)
return validID.ReplaceAllString(input_str, " ")
}
func Tab_to_space(input_str string) string {
var validID = regexp.MustCompile(`\t`)
return validID.ReplaceAllString(input_str, " ")
}
func Space_to_tab(input_str string) string {
var validID = regexp.MustCompile(`\s`)
return validID.ReplaceAllString(input_str, " ")
}
// delete non-alphabetic characters
func Delete_non_alphabet_with_space(input_str string) string {
var validID = regexp.MustCompile(`[^A-Za-z]`)
temp_str := validID.ReplaceAllString(input_str, " ")
return Clean_up(temp_str)
}
func Delete_non_alphabet_without_space(input_str string) string {
var validID = regexp.MustCompile(`[^A-Za-z\s]`)
temp_str := validID.ReplaceAllString(input_str, "")
return Clean_up(temp_str)
}
func Delete_punctuation_with_space(input_str string) string {
var validID = regexp.MustCompile(`[^A-Za-z0-9]`)
temp_str := validID.ReplaceAllString(input_str, " ")
return Clean_up(temp_str)
}
func Delete_punctuation_without_space(input_str string) string {
var validID = regexp.MustCompile(`[^A-Za-z0-9\s]`)
temp_str := validID.ReplaceAllString(input_str, "")
return Clean_up(temp_str)
}
// return a new string that contains only numbers
func Extract_number(input_str string) string {
var validID = regexp.MustCompile(`[^\d]`)
temp_str := validID.ReplaceAllString(input_str, " ")
return Clean_up(temp_str)
}
// extract numbers from string
// export it to an array of words
func Extract_number_to_array(input_str string) []string {
var validID = regexp.MustCompile(`[^\d]`)
temp_str := validID.ReplaceAllString(input_str, " ")
temp_str = Clean_up(temp_str)
return strings.Split(temp_str, " ")
}
func Split_by_word(input_str string) []string {
temp_str := Clean_up(input_str)
temp_str = Delete_punctuation_with_space(temp_str)
temp_arr := strings.Split(temp_str, " ")
// pop off the last unnecessary character
if temp_arr[0] == "" || temp_arr[0] == " " {
temp_arr = temp_arr[1:]
}
// delete the first unnessary character
if temp_arr[len(temp_arr)-1] == "" || temp_arr[len(temp_arr)-1] == " " {
temp_arr = temp_arr[:len(temp_arr)-1]
}
var final_arr []string
for _, elem := range temp_arr {
final_arr = append(final_arr, Clean_up(elem))
}
return final_arr
}
func Split_by_sentence(input_str string) []string {
var validID = regexp.MustCompile(`[.!?]`)
temp_str := validID.ReplaceAllString(input_str, "___")
temp_str = Clean_up(temp_str)
temp_arr := strings.Split(temp_str, "___")
// pop off the last unnecessary character
if temp_arr[0] == "" || temp_arr[0] == " " {
temp_arr = temp_arr[1:]
}
// delete the first unnessary character
if temp_arr[len(temp_arr)-1] == "" || temp_arr[len(temp_arr)-1] == " " {
temp_arr = temp_arr[:len(temp_arr)-1]
}
var final_arr []string
for _, elem := range temp_arr {
final_arr = append(final_arr, Clean_up(elem))
}
return final_arr
}
func Split_by_paragraph(input_str string) []string {
temp_arr := strings.Split(input_str, "\n")
var final_arr []string
for _, elem := range temp_arr {
final_arr = append(final_arr, Clean_up(elem))
}
return final_arr
}
func Count_sentence(input_str string) int {
temp_arr := Split_by_sentence(input_str)
return len(temp_arr)
}
func Count_word(input_str string) int {
temp_arr := Split_by_word(input_str)
return len(temp_arr)
}
// count including special characters
func Count_character(input_str string) int {
temp_str := Clean_up(input_str)
temp_arr := strings.Split(temp_str, "")
return len(temp_arr)
}
// rune is an alias for int32
// to distinguish character values from integer values
func Reverse_str(input_str string) string {
runes := []rune(input_str)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func Check_palindrome(input_str string) bool {
temp_str := Clean_up(input_str)
temp_str = Delete_punctuation_without_space(temp_str)
temp_str = strings.ToLower(temp_str)
var validID = regexp.MustCompile(`\s{1,}`)
temp_str = validID.ReplaceAllString(temp_str, "")
rev_str := Reverse_str(temp_str)
if temp_str == rev_str {
return true
} else {
return false
}
}
func swap_rune(r rune) rune {
switch {
case 'a' <= r && r <= 'z':
return r - 'a' + 'A'
case 'A' <= r && r <= 'Z':
return r - 'A' + 'a'
default:
return r
}
}
func Swap_case(str string) string {
return strings.Map(swap_rune, str)
}
// insert comma between digits 100000 -> 100,000
func Insert_number_comma(input_num int) string {
temp_str := strconv.Itoa(input_num)
var num_arr []string
i := len(temp_str)%3;
if i == 0 { i = 3 }
for index, elem := range strings.Split(temp_str, "") {
if i == index {
num_arr = append(num_arr, ",");
i += 3;
}
num_arr = append(num_arr, elem)
}
return strings.Join(num_arr, "")
}