Python中有str.ljust
、str.rjust
、str.center
用于左对齐、右对齐和居中对齐字符串。例如'hello'.ljust(10, '*')
返回'hello*****'
,'hello'.rjust(10, '*')
返回'*****hello'
,等。每个中日韩文(CJK字符)在Python中被视为一个字符,然而它们的显示宽度为2,这个矛盾使ljust
、rjust
、center
不能正确地对齐CJK字符:例如'你好'.ljust(5, '*')
返回'你好***'
而不是'你好*'
。另见此文。
为了阐述如何解决这个问题,假设我们要以 w w w显示宽度对齐字符串s
,并以ljust
(doc)为例(另外两个同理),另假设fillchar='*'
。易知我们需要在s
的右侧补 w − l w-l w−l个'*'
,其中 l l l是s
的显示宽度。而为了使ljust
为我们补 w − l w-l w−l个'*'
,ljust
的第1个参数应为 n + w −