Groovyで特定文字(空白類文字)を含まない部分の長さを調べる その2


Groovyで特定文字(空白類文字)を含まない部分の長さを調べるの続き

指定してるパラメーターが違うと推測。
チルダがあるかないかで、型が異なるようだ。

Groovyの正規表現はなぜ文字列か
以下らしい

表記
~/hoge/ Pattern
/hoge/ String

これが原因かなのかな。
ということは、/hoge/を指定してString渡しすれば上手くいくのか?

正規表現(java.util.regex.Pattern)の~/hoge/ではなく、文字列の/hoge/を指定してみる。

def matching_length(str, regexp){
    println "matching_length() regexp is " +  regexp.getClass().getName()
    result = 0
    m = (~"$regexp").matcher(str)
    m.find()
    m.each{ chunk ->
        result += chunk.size()
    }
    return result
}

def unmatching_length(str, regexp){
    println "unmatching_length() regexp is " +  regexp.getClass().getName()
    return str.length() - matching_length(str, regexp)
}


/* 空白類文字以外は何文字か? */
println unmatching_length("abc d eee ff\n", /\s/)

結果

groovy:000> load 044_3_特定の文字を含む部分の長さを調べる.groovy
===> true
===> true
===> true
unmatching_length() regexp is java.lang.String
ERROR groovy.lang.MissingMethodException: No signature of method: groovysh_evaluate.matching_length() is applicable for argument types: (java.lang.String, java.lang.String) values: [abc d eee ff
, \s]
        at groovysh_evaluate.unmatching_length (groovysh_evaluate:4)
        at groovysh_evaluate.run (groovysh_evaluate:2)

だめじゃん。。。( ̄▽ ̄;)

groovy.lang.MissingMethodExceptionのままだけど、
第2パラメーがjava.lang.StringでもNGだ。
といことは、defの使い方が間違ってるのか?



最近のキーワード










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

Groovyイン・アクション
Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet
毎日コミュニケーションズ
売り上げランキング: 294340


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

Rubyレシピブック 第2版 268の技
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンク クリエイティブ
売り上げランキング: 80467


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

ブックストッパー

トモエ算盤
売り上げランキング: 614


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