jcode.rb

[2001/02/27] by CozoH [2001/03/08] by るびきち

概要

Stringクラスのメソッドを追加、再定義し、 日本語を意識した文字列処理を提供します。

使用例

*1[2001/03/08]るびきち:$KCODEを指定しないと結果がおかしいので注意。

require 'jcode'
$KCODE='e' # 漢字コードをEUCに。Windowsでは 's' 
print 'abcdef'.tr( 'a-z', 'A-Z' ), "\n"

追加メソッド

each_char
each_char {|char| ... }

文字列中の各文字に対して繰り返します。 ブロックを指定せずに呼び出された時には、各文字の配列を返します。

例:

#!/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+
end_regexp

最後の文字が多バイト文字である文字列にマッチする正規表現を返します。 再定義されたString#succで内部的に使われます。

jcount(str)

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
jlength
jsize

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
mbchar?

selfに多バイト文字が最初に現れる位置を返します。 多バイト文字が含まれていなければnilを返します。

例:

#!/usr/bin/env ruby
$KCODE='e'
zstr='ABCDEF'
hoge='hogehoge'

require 'jcode'

p zstr.mbchar? # => 0
p hoge.mbchar? # => nil

再定義メソッド

それぞれのメソッドに!がついているものは破壊的メソッドです。

chop
chop!

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
delete(str)
delete!(str)

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
squeeze([str])
squeeze!([str])

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
succ
succ!

String#succの日本語対応版です。

以下のようなの文字列を返します。

"あaあ".succ => "あaぃ"
"rb".succ => "rc"
"_紅玉".succ => "_紅桐"

従来のString#succは、 多バイト文字と半角文字が混在している文字列を 意図通りに処理することができません。 例えば上記のコードは、それぞれ "あbあ""sb""_紘玉"を返します。

なお、"99"の次は"100"になるのに対し、 "99"の次は"100"にはならないことに注意。 "Az""zz"も同様です。 *2

tr(search, replace)
tr!(search, replace)

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
tr_s(search, replace)
tr_s!(search, replace)

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")
"foo"
irb(main):012:0> "foo".tr_s("o", "f")
"foo"

ありゃ?*3 *4


*1募集中
*2CozoH: このあたり、もっと正確で分かりやすい説明が欲しいです。私自身、よく分かっていないので。
*3[2001/03/09]るびきち:おっかしいなぁ
*4[ruby-list:31275]



rubyist ML