好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

ruby1.9 での String#ljust とか

何回か同じようなものを書いた気がしつつ、どこにやったか忘れてしまったのでメモ。Shift-JIS(というかWindows-31J)以外のことは気にしない。つか、1.8系でも半角カナとかは ljust しても期待した動作にならないんだから、気にせず bytesize であわせてくれてもいいのに、と思った今日この頃。

もしくは lbytejust とか?(命名センスゼロ)

関連

#! ruby -Ks
# coding: Windows-31J

puts "1234567890"*2
puts "|#{'abc'.ljust(10)}|"
puts "|#{'アイウ'.ljust(10)}|"
puts "|#{'アイウ'.ljust(10)}|"
puts "|#{'abc'.ljust(10)}|"
puts "|#{'abc'.ljust(2)}|"
puts "|#{'abc'.rjust(10)}|"
puts "|#{'abc'.center(10)}|"

class String
  def ljust(width, padding = ' ')
    bytesize > width ? String.new(self) :
      self + (padding * ((width - bytesize) / padding.bytesize))
  end

  def rjust(width, padding = ' ')
    bytesize > width ? String.new(self) :
      (padding * ((width - bytesize) / padding.bytesize)) + self
  end

  def center(width, padding = ' ')
    n = (width - bytesize) / padding.bytesize
    l, r = n / 2, n / 2 + n % 2
    bytesize > width ? String.new(self) : padding * l + self + padding * r
  end
end

puts "1234567890"*2
puts "|#{'abc'.ljust(10)}|"
puts "|#{'アイウ'.ljust(10)}|"
puts "|#{'アイウ'.ljust(10)}|"
puts "|#{'abc'.ljust(10)}|"
puts "|#{'abc'.ljust(2)}|"
puts "|#{'abc'.rjust(10)}|"
puts "|#{'abc'.center(10)}|"
12345678901234567890
|abc       |
|アイウ       |
|アイウ       |
|abc       |
|abc|
|       abc|
|   abc    |
12345678901234567890
|abc       |
|アイウ       |
|アイウ    |
|abc    |
|abc|
|    abc|
|  abc  |