大量の文字出力があるコマンドラインアプリを作りました。その中の数行の出力結果が非常に長い場合、結果が見にくくてしょうがない問題に襲われました。
そこで、指定文字数だけ出力して残りを切り捨てるsnippetを追加。split(//)で1文字ずつhitさせるのが、multi-byte文字を扱うときの定石らしいですね。なんとなく実装しましたが、もっとうまい方法ないかなぁ...
def truncate(string, width) if string.length <= width string else abbr_symbol = "..." string = string[0, width - abbr_symbol.length] # Even if string consisted multi-byte characters, # number_of_character would work well. number_of_character = string.split(//).size # Last character may be broken. string = string.split(//)[0, number_of_character-1].join (string || "") + abbr_symbol end end
2011/06/23追記:
こういうときはjustified(揃える)という英単語を使うらしい。この場合だとleft_justifiedか。適切な名前がすぐに思いつくようになりたいなぁ...orz
2011/07/01追記:
String.ljustでもっと簡単に実装できる気がしてきました...。