Groovyで文字列の一部を取り除く

正規表現にマッチした部分を取り除く

ソース
str1 = "1)\t今日の昼食\nうに\n"
println str1
println str1.replaceFirst(/\s+/,"")
println str1.replaceAll(/\s+/,"")

最初だけ変換するなら、replaceFirst()
全部変換なら、replaceFirst

実行結果
1)      今日の昼食
うに

1)今日の昼食
うに

1)今日の昼食うに

特定の文字を取り除く

ソース
str2 = "2)goooooooooooooogle"
println str2
println str2.minus("o")
println str2.replaceAll(/o/,"")

minus()だと一文字しか削ってくれない。
Rubyのdelete()のように全部削除してくれるメソッドはなさそうなので
正規表現

実行結果
2)goooooooooooooogle
2)gooooooooooooogle
2)ggle

連続する文字を1文字にまとめる

ソース
str3 = "3)gggooogle"
println str3
println str3.replaceAll(/g+/,"g")

こちらもRubyのsqueeze()のようなメソッドはなさそうなので
正規表現

実行結果
3)gggooogle
3)gooogle
ソース
str4 = "4)マルチバイト文字も使える。すごい!!!!"
println str4
println str4.replaceAll(/!+/,"!")
実行結果
4)マルチバイト文字も使える。すごい!!!!
4)マルチバイト文字も使える。すごい!

末尾の文字を取り除く

末尾についての正規表現は以下を参照
正規表現が文字列の先頭・末尾にマッチするか調べる (マルチラインモード含む)


ソース
str5 = "5)aaax"
println str5
println str5.replaceAll(/(?m)(?s).\z/,"")

str6 = "6)aaa\n"
println str6
println str6.replaceAll(/(?m)(?s).\z/,"")

str7 = "7)aaa\r\n"
println str7
println str7.replaceAll(/(?m)(?s).\z/,"")
実行結果
5)aaax
5)aaa
6)aaa

6)aaa
7)aaa

7)aaa

インデックスを指定して取り除く

ソース
str8 = "8)goooooooooooooogle"
println str8
str8[1..10]= ""
println str8
実行結果
8)goooooooooooooogle
Caught: groovy.lang.MissingMethodException: No signature of method: Q054_文字列の一部を取り除く.String() is applicable for argument types: (java.lang.String) values: [8)goooooooooooooogle]
        at Q054_文字列の一部を取り除く.run(Q054_文字列の一部を取り除く.groovy:40)

Groovyで文字列を置換する の最後でもはまったけど
文字列のインデックス/添字操作ってできないのはなんでだ?

添削歓迎

ここ間違ってるよ
こうした方が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レシピブックは「ほんたった」で立ててる