右側用短劃線填充字符串。例如將'M'
轉換爲'M-----'
。用短劃線(' - ')在右側用短劃線填充字符串
sprintf "%-6s", "M";
給我'M '
。我試過printf "%-6-s", "M";
和printf "%--6s", "M";
,但這兩者都沒有工作...
這可以用sprinf
完成,如果是這樣,如何?
右側用短劃線填充字符串。例如將'M'
轉換爲'M-----'
。用短劃線(' - ')在右側用短劃線填充字符串
sprintf "%-6s", "M";
給我'M '
。我試過printf "%-6-s", "M";
和printf "%--6s", "M";
,但這兩者都沒有工作...
這可以用sprinf
完成,如果是這樣,如何?
單靠sprintf
無法完成。 (sprintf
將只用空格或用零墊。)
sprintf("%-6s", $s) =~ tr/ /-/r
或
substr($s.("-" x 6), 0, 6)
或
$s . ("-" x (6-length($s)))
sprintf
僅支持填充與0
和,所以沒有。你可以用其中的一個填充,然後替換填充,但問題在於,你冒着替換原始字符串中任何填充字符的風險。例如
sprintf('%-6s', ' M') =~ s/ /-/gr
產生--M---
。
從FAQ:
如果需要墊比其它空白字符或零您可以 使用下列方法之一。它們全都生成帶有
x
運算符的填充字符串,並將其與$text
結合使用。這些方法不要 truncate$text
。左,與任何字符右填充,創建一個新的字符串:
my $padded = $pad_char x ($pad_len - length($text)) . $text; my $padded = $text . $pad_char x ($pad_len - length($text));
左右填充任何字符,直接修改
$text
:substr($text, 0, 0) = $pad_char x ($pad_len - length($text)); $text .= $pad_char x ($pad_len - length($text));
如果你經常這樣做,你可以把它包裝在一個子程序中。
sub pad {
my ($str, $padding, $length) = @_;
my $pad_length = $length - length $str;
$pad_length = 0 if $pad_length < 0;
$padding x= $pad_length;
$str.$padding;
}
say pad('M', '-', 6);
say pad('MMMMMM', '-', 6);
say pad('12345', '-', 6);
say pad('1234567', '-', 6);
say pad(' ', '-', 6);
輸出:
M-----
MMMMMM
12345-
1234567
--
向我介紹'x'操作符的獎勵點。在與perl合作的10年中,我從來沒有見過這種感覺,現在我感覺自己像個新手。 – ipetrik
'的sprintf( 「% - 6S」, 「M」)=〜TR | | - | r;' –