Stringクラスのメソッドを追加、再定義し、 日本語を意識した文字列処理を提供します。
require 'jcode' $KCODE='e' # 漢字コードをEUC-JPに。Windowsで Shift_JIS なら 's' にする print 'abcdef'.tr( 'a-z', 'A-Z' ), "\n"
$KCODE はこのスクリプト自体の文字コードあわせて設定します。
文字列中の各文字に対して繰り返します。 ブロックを指定せずに呼び出された時には、各文字の配列を返します。
例:
#!/usr/bin/env ruby
$KCODE='e'
require 'jcode'
zstr='ABCDEF'
p zstr.each_char
zstr.each_char do |x|
print "+#{x}+"
end # => +A++B++C++D++E++F+
最後の文字が多バイト文字である文字列にマッチする正規表現を返します。 再定義されたString#succで内部的に使われます。
String#countの日本語対応版です。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='ABCDEF' hogehoge='hogehoge' p zstr.count 'A' # => 7 ←これは正しくない p hogehoge.count "g" # => 2 require 'jcode' p zstr.jcount 'A' # => 1 p hogehoge.jcount "g" # => 2
String#lengthの日本語対応版です。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='ABCDEF' hogehoge='hogehoge' p zstr.size # => 12 p hogehoge.size # => 8 require 'jcode' p zstr.jsize # => 6 p hogehoge.jsize # => 8
selfに多バイト文字が最初に現れる位置を返します。
多バイト文字が含まれていなければnilを返します。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='ABCDEF' hoge='hogehoge' require 'jcode' p zstr.mbchar? # => 0 p hoge.mbchar? # => nil
それぞれのメソッドに!がついているものは破壊的メソッドです。
String#chopの日本語対応版です。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='ABCDEF' hogehoge='hogehoge' p zstr.chop # => ABCDE\243 p hogehoge.chop # => hogehog require 'jcode' p zstr.chop # => ABCDE p hogehoge.chop # => hogehog
String#deleteの日本語対応版です。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='ABCDEF' hogehoge='hogehoge' p zstr.delete "A" # => 唾津\306 p hogehoge.delete "e" # => hoghog require 'jcode' p zstr.delete "A" # => BCDEF p hogehoge.delete "e" # => hoghog
String#squeezeの日本語対応版です。
例:
#!/usr/bin/env ruby $KCODE='e' zstr='AABBCC' hogehoge='hhoge' p zstr.squeeze # => AABBCC p hogehoge.squeeze # => hoge require 'jcode' p zstr.squeeze # => ABC p hogehoge.squeeze # => hoge
String#succの日本語対応版です。
以下のような次の文字列を返します。
"あaあ".succ => "あaぃ" "rb".succ => "rc" "_紅玉".succ => "_紅桐"
従来のString#succは、
多バイト文字と半角文字が混在している文字列を
意図通りに処理することができません。
例えば上記のコードは、それぞれ
"あbあ"、"sb"、"_紘玉"を返します。
なお、"99"の次は"100"になるのに対し、
"99"の次は"100"にはならないことに注意。
"Az"や"zz"も同様です。 *1
String#trの日本語対応版です。
例:
#!/usr/bin/env ruby
$KCODE='e'
zstr='AABBCC'
hogehoge='hhoge'
p zstr.tr('A-Z','A-Z') # => A疏疏汰汰蛋\303
p hogehoge.tr('a-z','A-Z') # => 旙旙\332
require 'jcode'
p zstr.tr('A-Z','A-Z') # => AABBCC
p hogehoge.tr('a-z','A-Z') # => HHOGE
String#tr_sの日本語対応版です。
irb(main):009:0> "foo".tr_s("o", "f")
"ff"
irb(main):010:0> require 'jcode'; $KCODE='e'
"e"
irb(main):011:0> "foo".tr_s("o","f")
"ff"
irb(main):012:0> "foo".tr_s("o", "f")
"ff"
*1CozoH: このあたり、もっと正確で分かりやすい説明が欲しいです。私自身、よく分かっていないので。