068:文字列の一部を特定の文字列で埋める
お題
「Password:」という文字列の後から行末までを「*」に変える
コード
def hidePassword(str){ str.replaceAll(/(Password:)(.*)/) {all, s1, s2 -> s1 + '*'*s2.size() } } result = hidePassword("Password:あいうえおabcdeかきくけこfghij") assert result == "Password:********************"
試行錯誤
$1と$2で""で括る
str.replaceAll(/(Password:)(.*)/ , "$1" + '*'*"$2".size())
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: D:\workspace\GroovySample\groovy_SandBox\Q068_文字列の一部を特定の文字列で埋める.groovy: 9: illegal string body character after dollar sign; solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 9, column 34. str.replaceAll(/(Password:)(.*)/ , "$1" + '*'*"$2".size()) ^ 1 error
あれ?
なんでダメ?
$1と$2で''で括る
str.replaceAll(/(Password:)(.*)/ , '$1' + '*'*'$2'.size()) Caught: Assertion failed: assert result == "Password:********************" | | | false Password:** Assertion failed:
展開されず、size()が2となる
$1と$2で//で括る
str.replaceAll(/(Password:)(.*)/, /$1/ + '*'* /$2/.size())
Caught: Assertion failed: assert result == "Password:********************" | | | false Password:** Assertion failed:
$2が展開されず、size()が2となる
添削歓迎
ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバック、はてブ、Twitter @orange_clover宛 で、お願いします。
実行環境
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
問題自体は第2版のもの。
自分で考えるために他言語の例をGroovyで置き換えてる。
が、自分だけで書いてるとGroovyっぽくならいないのが玉にキズ。