Rubyにおける文字列操作について、より高度な操作を解説します。
nkfという文字列を操作する標準ライブラリがあります。このライブラリを使うと文字コードの変換はもちろん、カタカナをひらがなに変換、といったことが簡単にできます。
nkfはもともとUnixで使われるコマンドですが、それをRubyで扱えるようにしたライブラリがnkfです。
また、クウォーテーションやタグ、改行が入っていて扱いの難しい文字列でも扱うことができるヒアドキュメントについて解説します。
nkfで文字列を変換
ひらがなからカタカナへ変換、またはその逆の変換をするということは、意外とよく出てきます。例えば、氏名のフリガナ欄への入力値を、すべて全角カタカナへ強制的に変換する、などです。
そのような変換は、nkfを使えばとても簡単にできます!
ひらがなからカタカナへ
ひらがなからカタカナへ、その逆へ変換してみましょう。
nkfそのままでは読み込まれないライブラリなので、先頭でrequireを記述して読み込むよう指定します。
nkfの書式は以下となります。
require "nkf" NKF.nkf(オプション, 変換する文字列)
[使用例]
require "nkf" str1 = "ひらがなからカタカナへ" puts NKF.nkf("-h2 -w", str1) str2 = "カタカナからひらがなへ" puts NKF.nkf("-h1 -w", str2)
[実行結果]
ヒラガナカラカタカナヘ かたかなからひらがなへ
相互に変換できることがわかりました。
先ほどの氏名フリガナ欄の例で、例えばデータベースへ文字列を格納する際など、すべて全角カタカナに統一したいということがあります。実は、先ほどの例は何もしなくても全角に変換されます。
require "nkf" str1 = "ひらがなから全角カタカナへ" puts NKF.nkf("-h2 -w", str1)
[実行結果]
ヒラガナカラ全角カタカナヘ
半角のまま変換したい場合は、オプションを足します。
require "nkf" str1 = "ひらがなから全角カタカナへ" puts NKF.nkf("-xh2 -w", str1)
[実行結果]
ヒラガナカラ全角カタカナヘ
半角のまま変換されました。
全角スペースを半角スペース2つに変換
nkfは全角スペースを半角スペースにすることができます。
require "nkf" str1 = "全角スペース を半角スペース1つにする" puts NKF.nkf("-Z1 -w", str1) str2 = "全角スペース を半角スペース2つにする" puts NKF.nkf("-Z2 -w", str2)
[実行結果]
全角スペース を半角スペース1つにする 全角スペース を半角スペース2つにする
半角スペース1つまたは2つに変換することができました。
nkfはその他多数のオプションがあります。特に文字コード変換に関するオプションが多いです。Rubyのマニュアルに詳細がありますので、参照してください。
他言語では自分で地道に組まないといけないカナ変換や全角スペースの半角化、これらがライブラリ化されているというのは、とても便利ですよね。
ヒアドキュメント
プログラム中で、とても長い文字列を扱うことがあります。そんなときは、ヒアドキュメントを使うと便利です。
[書式]
<< 終了をあらわす記号 ・・・文字列・・・ 終了をあらわす記号
終了記号はなんでも良いのですが、慣例的にEOF(End Of File)やEOB(End Of Block)を使います。また、そのまま変数に大入できます。
例をあげてみましょう。
str = <<EOB とっても長い文字列を格納することができます。例えば、こんな感じです。 EOB puts str
[実行結果]
とっても長い文字列を格納することができます。例えば、こんな感じです。
<<だけでなく、マイナスを加えて<<-とすると、インデントが使えます。ついでに、式展開も加えましょう。
def heredocument_test(param) puts <<-EOB <<だけでなく、マイナスを加えて <<-とすると、インデントが使えます。 #{param} EOB end heredocument_test 'こんな感じです'
[実行結果]
<<だけでなく、マイナスを加えて <<-とすると、インデントが使えます。 こんな感じです
Rubyのヒアドキュメントですごいのは、オブジェクトとして扱うこともできることです。
puts <<EOS.downcase abcdefgHIJKLMN EOS
[実行結果]
abcdefghijklmn
すべて小文字に変換されたということが大事ではなく、downcaseの戻り値をそのままEOSに渡すことができる、ということです。
文字列を返すものならなんでも良いのですが、その例としてdowncaseを使いました。
何に使うのか?
ヒアドキュメントが何なのかがわかったところで、一体何に使うのか?と気になった方も多いでしょう。
ヒアドキュメントの強みは、文字列中にタグや改行、クウォーテーションなどが混入しても全く気にする必要がないということです。
str = <<EOB <p>こんな感じで、タグやら""やら</p> <p>何が入って'も'大丈'夫</p> EOB puts str
[実行結果]
<p>こんな感じで、タグやら""やら</p> <p>何が入って'も'大丈'夫</p>
中身がどうであろうと、問題なく表示できています。
まとめ
本記事では、nkfライブラリとヒアドキュメントについて解説しました。
両方とも、活用次第ではプログラミングがとても楽になります。ぜひ自分で試してマスターしてみてくださいね!