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")
実行結果
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宛 で、お願いしまます。
実行環境
- 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イン・アクションを読むならあった方が便利かな。