Golang : Join lines with certain suffix symbol example
For this tutorial,we will learn how to join lines of text into a string and also explore the option to ONLY join certain lines than match a given criteria. The situation that demands this kind of join lines utility is usually involve cleanly up raw text data files. For example, in the text data files, certain lines need to be joined if some lines end with :
or +
symbols.
The code example below demonstrates how to join lines by the default empty space, insert :
symbol in between or only join the lines if a line has certain symbol as suffix.
Here you go!
package main
import (
"fmt"
"strings"
)
func JoinLines(input []string, joinBy string) string {
return strings.Join(input, joinBy)
}
func OnlyJoinLines(input []string, onlyJoinBy string) string {
var result []string
var skipIndex int
for k, v := range input {
if strings.HasSuffix(v, onlyJoinBy) {
// only join lines that match the criteria
if k+1 >= len(input) {
result = append(result, v+input[k]+"\n")
skipIndex = k
} else {
result = append(result, v+input[k+1]+"\n")
// after joining, mark the next index to skip
skipIndex = k + 1
}
} else {
if !(skipIndex > 0) {
result = append(result, v+"\n")
}
// remember to reset back to 0
skipIndex = 0
}
}
return strings.Join(result, "")
}
func main() {
lines := `line 1
line 2
line 3:
line 4
line 5:
line 6
line 7
line 8+
line 9`
// turn lines into slice
lineSlice := strings.Split(lines, "\n")
result1 := JoinLines(lineSlice, " ")
fmt.Println("RESULT 1 : ", result1)
// join all lines with :
result2 := JoinLines(lineSlice, ":")
fmt.Println("RESULT 2 : ", result2)
// ONLY join lines that have : symbol as suffix
result3 := OnlyJoinLines(lineSlice, ":")
fmt.Println("RESULT 3 : ", result3)
// ONLY join lines that have + symbol as suffix
result4 := OnlyJoinLines(lineSlice, "+")
fmt.Println("RESULT 4 : ", result4)
}
Output:
RESULT 1 : line 1 line 2 line 3: line 4 line 5: line 6 line 7 line 8+ line 9
RESULT 2 : line 1: line 2: line 3:: line 4: line 5:: line 6: line 7: line 8+: line 9
RESULT 3 : line 1
line 2
line 3: line 4
line 5: line 6
line 7
line 8+
line 9
RESULT 4 : line 1
line 2
line 3:
line 4
line 5:
line 6
line 7
line 8+ line 9
Hope this helps and happy coding!
References:
See also : Golang : Scramble and unscramble text message by randomly replacing words
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
+9k Golang : Inject/embed Javascript before sending out to browser example
+43.4k Golang : Convert []byte to image
+7.7k Golang : Convert(cast) io.Reader type to string
+22.5k Golang : Convert Unix timestamp to UTC timestamp
+16.4k CodeIgniter/PHP : Create directory if does not exist example
+6.8k Golang : Output or print out JSON stream/encoded data
+5.3k Golang : Generate Interleaved 2 inch by 5 inch barcode
+8.3k Golang : Add build version and other information in executables
+6.9k Android Studio : Hello World example
+11.7k Golang : Find age or leap age from date of birth example
+5.9k Golang : Denco multiplexer example
+24.6k Golang : Time slice or date sort and reverse sort example