我是Groovy的新手。我有点困惑。
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'不等于' args [0]' 在我看来,GString和String是不同的。
问题是:为什么长度不同(" D:\ bin" - 6," D:\\ bin" - 7),但更换已完成。
答案 0 :(得分:1)
在我看来,GString和String是不同的。
这是事实,但与您的问题无关,因为您的代码中的所有字符串都不是GStrings。
问题是\
用于表示字符串中的特殊字符(制表符,空格等)。如果你想使用\
来表示反斜杠字符,你需要使用额外的反斜杠来转义它
def str = 'D:\\bin'
或者,使用slashy strings代替
def str = /D:\bin/
答案 1 :(得分:0)
谢谢BalRog。 'str'是一个String,但'args [0]'是正则表达式。