私はGroovyの初心者です。そして私は少し混乱しています。groovy replaceAll strange behavior
のGroovyコード:
def str = 'D:\\bin'
def newStr = str.replaceAll(args[0],args[1])
println 'str :' + str + ' (' + str.length() + ')'
println 'newStr :' + newStr + ' (' + newStr.length() + ')'
println 'args[0]:' + args[0] + ' (' + args[0].length() + ')'
println 'args[1]:' + args[1] + ' (' + args[1].length() + ')
assert str == args[0]
、今それをテスト:
>groovy test.groovy D:\bin C:\data
str :D:\bin (6)
newStr :D:\bin (6)
args[0]:D:\bin (6)
args[1]:C:\data (7)
でReplaceAllは何もしません。 と別のテスト:
>groovy test.groovy D:\\bin C:\\data
str :D:\bin (6)
newStr :C:\data (7)
args[0]:D:\\bin (7)
args[1]:C:\\data (8)
Caught: Assertion failed:
assert str == args[0]
| | | |
| | | D:\\bin
| | [D:\\bin, C:\\data]
| false
D:\bin
でReplaceAllは現在正常に動作しますが、私たちが見ることができる「str」はイコールではありません「引数[0]」 それはGストリング私には思えるし、文字列が異なっています。
問題は長さが異なる理由(「D:\ bin」 - 6、「D:\\ bin」 - 7)ですが、置き換えが行われます。
これは 'GString'とは関係ありません(上の文字列は' GString'です)。 '' D:\\ bin'.replaceAll( 'D:\\\\ bin'、 'C:\\ data') 'これは動作しているようにエスケープする問題 –
です。しかし、奇妙な行動。結果を見てくださいnewStrは 'C:\ data'ですが、args [1]は 'C:\\ data'でした。文字列は異なり、さらに長さも異なります。 –
'String.replaceAll()'のドキュメントを読んでください。文字列を文字列に置き換えることはありません。 *正規表現*を文字列で置き換えます。正規表現が何であるか、それが文字列とはどのように異なるかを理解できない場合は、それがあなたの問い合わせを開始する場所です。 – BalRog