如何调频。打印( "print this on the center" )



是可能的,用fmt.Println("...")打印带有壳的中心对准的字符串?

作为对这个长期解决问题的更新,可以通过使用fmt软件包中的*符号来改进@MiltonB发布的解决方案。来自包装文档:

在printf,sprintf和fprintf中,默认行为适用于每个行为格式化动词以格式化连续的参数。但是,动词之前的符号[n]表明第n个单索引的论点是格式化的。相同符合宽度或精度的符号在a*'之前选择参数索引保持值。处理括号的表达式[n],随后的动词将使用参数n 1,n 2等。除非另有指导。

因此,您可以用更简洁的格式语句替换两个fmt.Sprintf调用,以实现相同的结果:

s := "in the middle"
w := 110 // or whatever
fmt.Sprintf("%[1]*s", -w, fmt.Sprintf("%[1]*s", (w + len(s))/2, s))

请参阅行动中的代码。

另外,正如 @chris-dennis所述,在此示例中,[1]表示法是多余的,因为字符串的宽度已经是第一个参数。这也有效:

fmt.Sprintf("%*s", -w, fmt.Sprintf("%*s", (w + len(s))/2, s))

请参阅此示例。

只要壳宽度是已知值,该代码就会设法中心文本。它不是完全"像素完美",但我希望它会有所帮助。

如果我们将其分解,则有两个代码可以生成格式的字符串,然后向左填充。

fmt.Sprintf("%%-%ds", w/2)  // produces "%-55s"  which is pad left string
fmt.Sprintf("%%%ds", w/2)   // produces "%55s"   which is right pad

所以最终的Printf语句变为

fmt.Printf("%-55s", fmt.Sprintf("%55s", "my string to centre")) 

完整代码:

s := " in the middle"
w := 110 // shell width
fmt.Printf(fmt.Sprintf("%%-%ds", w/2), fmt.Sprintf(fmt.Sprintf("%%%ds", w/2),s))

产生以下内容:

                                     in the middle

链接到游戏地面:play

最新更新