diff options
Diffstat (limited to 'internal/split')
| -rw-r--r-- | internal/split/split.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/internal/split/split.go b/internal/split/split.go new file mode 100644 index 0000000..e03335c --- /dev/null +++ b/internal/split/split.go @@ -0,0 +1,55 @@ +package split + +import ( + "strings" +) + +func FormatInput(tokenArray []string, delimeterArray []string) []string { + for _, delimeter := range delimeterArray { + for index, element := range tokenArray { + tokenArray = NewArrayWithSplit(tokenArray, index, element, delimeter) + } + } + + return tokenArray +} + +func checkArrayElementsEmpty(array []string) bool { + for _, str := range array { + if str != "" { + return false + } + } + return true +} + +func NewArrayWithSplit(initialArray []string, index int, token string, delimeter string) (result []string) { + split := strings.Split(token, delimeter) + splitLength := len(split) + + /* + When a token only consists of delimeter * N (N >= 0), + the resulting split consists of N empty elements. + Here we check if it is so and essentialy remove that token + from resulting array. + */ + + splitIsEmpty := checkArrayElementsEmpty(split) + if splitIsEmpty { + result = append(initialArray[:index], initialArray[index+1:]...) + return result + } + + if splitLength > 1 { + if split[splitLength-1] == "" { + split = split[:splitLength-1] + } + + result = append(initialArray[:index], append(split, initialArray[index+1:]...)...) + } + if splitLength == 1 { + result = initialArray + } + + return result +} |
