如何在Kotlin日志中为变量填充空格以实现消息垂直对齐?
解决Kotlin日志消息垂直对齐问题
没问题,这有两种简单的方法能帮你实现日志的垂直对齐,让PASSEPORT和RESIDENCE_PERMIT始终从同一位置开始:
方法1:使用String.format格式化字符串
Kotlin完全兼容Java的格式化语法,你可以通过String.format指定第一个变量的固定宽度并左对齐,不足的部分自动补空格:
LOGGERCTRLONE.info( String.format( "Correctly Read document | doctype found : %-20s | %s", nameIdDocument, resultPreventRequest.documentType ) )
这里的%-20s含义:
%s:字符串类型占位符-:设置左对齐(默认是右对齐,不加-的话短字符串会靠右,达不到对齐效果)20:固定宽度为20个字符,长度不足时自动用空格填充
方法2:使用Kotlin的padEnd扩展函数
Kotlin自带了字符串填充的扩展函数padEnd,可以直接对nameIdDocument进行空格填充,确保它的长度固定:
LOGGERCTRLONE.info( "Correctly Read document | doctype found : ${nameIdDocument.padEnd(20)} | ${resultPreventRequest.documentType}" )
padEnd(20)会把字符串填充到20个字符长度,默认用空格补全。如果nameIdDocument的长度超过20,它不会自动截断,若需要截断过长的字符串,可以改成:
${nameIdDocument.take(20).padEnd(20)}
为什么你之前用%s-20没用?
在Kotlin的字符串模板($变量)中,直接写%s-20是无效的——模板只会直接替换变量值,不会解析格式化占位符,必须用String.format或者专门的字符串填充函数来实现对齐效果。
内容的提问来源于stack exchange,提问作者Olivier Neeb
相关产品推荐
相关产品推荐

