読者です 読者をやめる 読者になる 読者になる

Groovyで文字列の一部を取り除く (文字列のインデックス操作ができない理由と補足)

Groovy

id:torazukaぐるーびーたんで休憩。





Groovyで文字列の一部を取り除くid:nobusueid:fumokmmid: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宛 で、お願いしまます。

実行環境






Groovyの詳細についてはJavadocと以下の書籍を参考にしている。






Dierk Konig、Andrew Glover、Paul King、、Guillaume Laforge、Jon Skeet、杉浦 孝、櫻井 正樹、須江 信洋、関谷 和愛、佐野 徹郎、寺沢 尚史

Amazonでご確認ください。






問題自体は第2版のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。






青木 峰郎、後藤 裕蔵、高橋 征義、まつもと ゆきひろ

価格: ¥ 2,940
価格は記載時点のものです。購入前にAmazonでご確認ください。







Groovyイン・アクションを読むならあった方が便利かな。

Rubyレシピブックは「ほんたった」で立ててる