gpt4 book ai didi

string - 在 groovy 中格式化字符串输出

转载 作者:行者123 更新时间:2023-12-02 00:06:28 34 4
gpt4 key购买 nike

我正在尝试在 Groovy 中打印出一个基本 header 。我需要第一行让日期左对齐,机构名称居中,页码右对齐。在第二行,我需要一个以右对齐的报告名称为中心的报告描述。我无法获得要正确粘贴到此文本字段的输出示例,因此希望此描述足够了,它看起来很标准。

我从数据库中检索日期、机构名称、报告描述和报告名称。所以这些字段的大小是可变的。我认为这样的事情会起作用,但它不能右对齐或正确居中:

println String.format("%-${maxColumns}s %s %${maxColumns}s", dbDateTime.format('MMMMM d, yyyy'), institution, 'Page: 1')
println String.format("%-${maxColumns}s %s %${maxColumns}s", '', jobTitle, programName)

我将 maxColumns 设置为 80,即字符数限制。感谢您的帮助,我为此进行了高低搜索!谢谢!

最佳答案

一个快速而肮脏的解决方案可能是做这样的事情:

def header( int maxWidth=80, ...text ) {
def cols = maxWidth / text.size()
def idx = 0
text.inject( '' ) { s, t ->
idx++
if( t instanceof String ) {
s += t.center( (int)cols )
}
else {
switch( t.align ) {
case 'left' : s += t.text.padRight( cols, t.pad ?: ' ' ) ; break
case 'right' : s += t.text.padLeft( cols, t.pad ?: ' ' ) ; break
default : s += t.text.center( cols, t.pad ?: ' ' )
}
}
if( s.length() < Math.ceil( cols * idx ) && s.length() < maxWidth ) s += ' '
s
}
}

然后您可以将 map 列表传递给它,例如:

def text = header( [ text:dbDateTime.format( 'MMMMM d, yyyy' ), align:'left' ],
[ text:'woo', pad:'-' ],
[ text:'Page 1', align:'right' ] )

打印这个会给你:

August 12, 2013            -----------woo------------                     Page 1

显然这不能处理 maxWidth 不足以容纳所有字段的情况,可能还有一些其他情况,但这可能是一个好的开始?

关于string - 在 groovy 中格式化字符串输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18151207/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com