【发布时间】:2016-02-25 00:14:09
【问题描述】:
我是围棋新手。我找不到任何官方文档显示如何将多个字符串合并为一个新字符串。
我的期望:
输入:"key:"、"value"、", key2:"、100
输出:"Key:value, key2:100"
如果可能的话,我想使用+ 来合并字符串,例如 Java 和 Swift。
【问题讨论】:
我是围棋新手。我找不到任何官方文档显示如何将多个字符串合并为一个新字符串。
我的期望:
输入:"key:"、"value"、", key2:"、100
输出:"Key:value, key2:100"
如果可能的话,我想使用+ 来合并字符串,例如 Java 和 Swift。
【问题讨论】:
我喜欢使用 fmt 的Sprintf 方法来处理这类事情。它像 Go 或 C 中的 Printf 一样工作,只是它返回一个字符串。这是一个例子:
output := fmt.Sprintf("%s%s%s%d", "key:", "value", ", key2:", 100)
转到fmt.Sprintf 的文档
【讨论】:
您可以使用 strings.Join,它的速度几乎是 fmt.Sprintf 的 3 倍。但是它的可读性可能会降低。
output := strings.Join([]string{"key:", "value", ", key2:", strconv.Itoa(100)}, "")
见https://play.golang.org/p/AqiLz3oRVq
strings.Join 与 fmt.Sprintf
BenchmarkFmt-4 2000000 685 ns/op
BenchmarkJoins-4 5000000 244 ns/op
缓冲区
如果您需要合并大量字符串,我会考虑使用缓冲区而不是上面提到的那些解决方案。
【讨论】:
你可以这样做:
package main
import (
"fmt"
"strconv"
)
func main() {
result:="str1"+"str2"+strconv.Itoa(123)+"str3"+strconv.Itoa(12)
fmt.Println(result)
}
使用 fmt.Sprintf()
var s1="abc"
var s2="def"
var num =100
ans:=fmt.Sprintf("%s%d%s", s1,num,s2);
fmt.Println(ans);
【讨论】:
你可以使用text/template:
package main
import (
"text/template"
"strings"
)
func format(s string, v interface{}) string {
t, b := new(template.Template), new(strings.Builder)
template.Must(t.Parse(s)).Execute(b, v)
return b.String()
}
func main() {
s := struct{
Key string
Key2 int
}{"value", 100}
f := format("key:{{.Key}}, key2:{{.Key2}}", s)
println(f)
}
或fmt.Sprint:
package main
import "fmt"
func main() {
s := fmt.Sprint("key:", "value", ", key2:", 100)
println(s)
}
【讨论】:
下面是 Go Lang 中字符串和整数组合的简单方法(版本:go1.18.1 最新)
package main
import (
"fmt"
"io"
"os"
)
func main() {
const name, age = "John", 26
s := fmt.Sprintf("%s is %d years old.\n", name, age)
io.WriteString(os.Stdout, s) // Ignoring error for simplicity.
}
输出:
约翰 26 岁。
【讨论】: