Ruby

文字列を全角で左詰めする

More than 3 years have passed since last update.

文字列を任意の長さで左詰めすることができるljustという組み込みのメソッドがあります。

http://docs.ruby-lang.org/ja/2.0.0/method/String/i/ljust.html

以下のように使えば、表示を揃えたりするので便利です。

[["Miyamoto", "Musashi"], ["Sasaki", "Kojiro"]].each do |name|

puts name[0].ljust(10) + name[1]
end

Miyamoto  Musashi   

Sasaki Kojiro

しかしながら、全角が混ざったりするとうまく揃わなくなってしまいます。

[["宮本", "武蔵"], ["Sasaki", "Kojiro"]].each do |name|

puts name[0].ljust(10) + name[1]
end

宮本        武蔵

Sasaki Kojiro

このようなときは、Mojiというライブラリを使い、全角で揃えてしまえば良さそうです。以下のようにStringクラスへメソッドを追加すれば、同じような感覚で使えるでしょう。

# $ gem install moji

require 'moji'

class String
raise "String#ljust_to_byte method has already been defined." if method_defined?(:ljust_two_byte)
def ljust_two_byte(width, padding = ' ')
Moji.han_to_zen(self.ljust(width, padding).encode('utf-8'))
end
end

[["宮本", "武蔵"], ["Sasaki", "Kojiro"]].each do |name|
puts name[0].ljust_two_byte(10) + name[1].ljust_two_byte(10)
end

宮本        武蔵        

Sasaki    Kojiro

Railsで使うなら、lib/ext/string.rb あたりに定義して、

config/application.rb内で


config/application.rb

require 'ext/string'


すれば便利に使えそうです。