Groovyで文字列の一部を取り除く (文字列のインデックス操作ができない理由と補足)
Groovyで文字列の一部を取り除くにid:nobusue、id:fumokmm、id:deve68 コメントありがとうございました。
疑問
なぜ文字列はインデクス操作ができないか?
str8 = "8)goooooooooooooogle" println str8 str8[1..10]= "" println str8 Caught: groovy.lang.MissingMethodException: No signature of method: Q054_文字列の一部を取り除く.String() is applicable for argument types: (java.lang.String) values: [8)goooooooooooooogle]
回答
StringのGDKでは(subscript operator)に対応するputAt()が実装されていないので
使えないようです。getAt()はあるので、参照専用ということですね。
一旦Listに変換すれば、putAt()が定義されているのでによる更新ができます。
疑問が1つ解けた。
問題 "8)goooooooooooooogle" の oを削る。
前回は、8)を後から足したのと、oの数を間違えてたので、インデックスがずれてた (^_^;)
みんな意図は分かってるのに、そのままのインデックスでコメントを書いてくれてたw
なので、元々のやりたかったこととに直す。
また、間違えそうだから、頭の 8)は削る。
改めて問題
『"goooooooooooooogle" の oを削る。』
toList()でバラしてjoin()
str8 = "goooooooooooooogle" str8 = str8.toList() str8[1..14] = '' str8 = str8.join() println str8
ggle
StringBufferをつかう
str8 = "goooooooooooooogle" str8 = str8 << '' str8[1..14] = '' str8 = str8.toString() println str8
ggle
取り除きたいところ以外を取得1
str8 = "goooooooooooooogle" str8 = str8[(0..<str8.size())-(1..14)] println str8
ggle
取り除きたいところ以外を取得2
str8 = "goooooooooooooogle" str8 = sprintf("%s%s", str8[0..0], str8[15..-1]) println str8
ggle
コメント
StringBufferへの変換
以下だけでStringBufferになるんだ。どこかで見た気がするが、忘れてたからメモ _〆(。。)
str8 = str8 << ''
クラス名の取得
へぇー、hoge.class でクラス名取得できるんだ。
===> goooooooooooooogle groovy:000> str8 = str8.toList() ===> [g, o, o, o, o, o, o, o, o, o, o, o, o, o, o, g, l, e] groovy:000> str8.class ===> class java.util.ArrayList groovy:000> str8 = "goooooooooooooogle" ===> goooooooooooooogle groovy:000> str8.class ===> class java.lang.String groovy:000> str8 = str8 << '' ===> goooooooooooooogle groovy:000> str8.class ===> class java.lang.StringBuffer
なるほど。
groovyshじゃなくて、groovyだとどうなる?
str8 = "goooooooooooooogle" str8 = str8 << '' println str8.class println str8.getClass().getName()
class java.lang.StringBuffer java.lang.StringBuffer
同じことはできるな。
添削歓迎
ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバック、はてブ、Twitter @orange_clover宛 で、お願いしまます。
実行環境
- OS:Windows XP
- Groovy Version: 1.6.5
- JVM: 1.6.0_12
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
Dierk Konig、Andrew Glover、Paul King、、Guillaume Laforge、Jon Skeet、杉浦 孝、櫻井 正樹、須江 信洋、関谷 和愛、佐野 徹郎、寺沢 尚史
Amazonでご確認ください。
問題自体は第2版のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。
Groovyイン・アクションを読むならあった方が便利かな。