我不喜欢多线字符串的Go约定:
function main() {
for {
if something {
text := ` Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
`
}
}
}
我更喜欢:
function main() {
for {
if something {
text := `
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
`
// text = unindent(text, 8) ?
}
}
}
效率不是问题。
如何从字符串值的每一行开头删除固定数量的空格?
答案 0 :(得分:2)
这是一个简单的strings.Replace()
电话:
text = strings.Replace(text, "\n ", "\n", -1)
替换之前和之后的输出(在Go Playground上尝试):
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
请注意,这仍然会在文本的开头和结尾留下换行符。如果您还想摆脱它们,可以使用strings.Trim()
:
text = strings.Replace(text, "\n ", "\n", -1)
text = strings.Trim(text, "\n")
注意:首先要考虑strings.TrimSpace()
,但这不是一个好选择,因为它也会删除第一行(" Lorem"
)的缩进,这是不需要的。我们真的只想摆脱额外的前缀和后缀换行。
验证差异:
text = strings.Replace(text, "\n ", "\n", -1)
fmt.Printf("%q\n", text)
text = strings.Trim(text, "\n")
fmt.Printf("%q\n", text)
输出:
"\n Lorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do eiusmod tempor incididunt ut labore et dolore magna\naliqua. \n Ut enim ad minim veniam, quis nostrud exercitation \nullamco laboris nisi ut aliquip ex ea commodo consequat.\n"
" Lorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do eiusmod tempor incididunt ut labore et dolore magna\naliqua. \n Ut enim ad minim veniam, quis nostrud exercitation \nullamco laboris nisi ut aliquip ex ea commodo consequat."
将其包装在辅助函数中:
func unindent(s string, spaces int) string {
old := "\n" + strings.Repeat(" ", spaces)
s = strings.Replace(s, old, "\n", -1)
return strings.Trim(s, "\n")
}
使用它:
text = unindent(text, 8)
创建old
可替换字符串的另一种方法:
func unindent(s string, spaces int) string {
old := fmt.Sprintf("%*c", -spaces-1, '\n')
s = strings.Replace(s, old, "\n", -1)
return strings.Trim(s, "\n")
}
答案 1 :(得分:1)
你可以试试这个不是一个好但简单的方法。
func main() {
text := "Lorem ipsum dolor sit amet, consectetur adipiscing elit,\n" +
"sed do eiusmod tempor incididunt ut labore et dolore magna\n" +
"aliqua.\n" +
"Ut enim ad minim veniam, quis nostrud exercitation\n" +
"ullamco laboris nisi ut aliquip ex ea commodo consequat."
fmt.Println(text)
}