我在golang中有一堆字符串和[]字符串,我需要连接它们。但由于某些原因,我需要摆脱很多空白。
这是代码
tests := strings.TrimSpace(s[0])
dep_string := make ([]string, len(tests) + len(sfinal))
dep_string = append (dep_string,tests)
for _,v := range sfinal {
dep_string = append(dep_string,v)
}
fmt.Println("dep_String is ",dep_string)
Input:
s[0] = "filename"
sfinal = [test test1]
expected output
[filename test test1]
actual output
[ filename test test1]
真的很奇怪;即使使用TrimSpace后我也无法摆脱多余的空间。是否有任何有效的方法来连接它们?
答案 0 :(得分:7)
空白是由dep_string中的所有空元素引起的。当您使用make函数时,它会创建一个具有指定长度和容量的切片,并填充一堆任何内容。然后,当您使用append时,它会看到切片已达到其最大容量,扩展切片,然后在所有内容之后添加您的元素。解决方案是制作一个能够容纳所有元素的切片,但初始长度为零:
dep_string := make ([]string, 0, len(tests) + len(sfinal))
strings.TrimSpace是不必要的。您可以在http://blog.golang.org/slices
了解更多信息答案 1 :(得分:4)
Bill DeRose和Saposhiente关于切片如何工作是正确的。
至于解决问题的简单方法,你也可以这样做(play):
fmt.Println("join is",strings.Join(append(s[:1],sfinal...)," "))
答案 2 :(得分:0)
当您执行作业dep_string := make ([]string, len(tests) + len(sfinal))
时,Go会将已分配的内存归零,以便dep_string
在其前面有len(tests) + len(sfinal)
个空字符串。正如它现在写的那样,在所有那些归零字符串之后,你附加到切片的末尾。
运行this以查看代码中显示这些空白的位置。您可以通过制作长度为0且容量为len(tests) + len(sfinal)
的切片来fix。然后,您可以使用strings.Join
连接它们。
答案 3 :(得分:0)
这是解决问题的简单而有效的方法。
package main
import "fmt"
func main() {
s := make([]string, 1, 4)
s[0] = "filename"
sfinal := []string{"test", "test1"}
dep_string := append(s[:1], sfinal...)
fmt.Println("dep_String is ", dep_string)
}
输出:
dep_String is [filename test test1]
答案 4 :(得分:0)
当您执行赋值dep_string := make ([]string, len(tests) + len(sfinal))
时,它会分配len(tests) + len(sfinal)
个空字符串,在您的情况下它是10个空字符串,因此当您执行赋值fmt.Println("dep_String is ",dep_string)
时,它将打印10 null字符串,因为fmt.Println(slice of string)
将在两个元素之间添加空白,因此它将打印9个空格,因此它会在您追加后打印[ filename test test1]
,空格是10个空字符串之间的空格。