如何查找字符串是否包含'/'作为最后一个字符。
如果不存在,我需要追加/最后一个字符
ex1 : def s = home/work
this shuould be home/work/
ex2 : def s = home/work/
this will remain same as home/work/
Mybad认为这很简单,但失败了
提前致谢
答案 0 :(得分:3)
您可以使用正则表达式,也可以使用endsWith("/")
。
答案 1 :(得分:3)
上面发布的endsWith方法有效,对大多数读者来说可能都很清楚。为了完整起见,这是使用正则表达式的解决方案:
def stripSlash(str) {
str?.find(/^(.*?)\/?$/) { full, beforeSlash -> beforeSlash }
}
assert "/foo/bar" == stripSlash("/foo/bar")
assert "/baz/qux" == stripSlash("/baz/qux/")
assert "quux" == stripSlash("quux")
assert null == stripSlash(null)
正则表达式可以理解为:
^
(.*?)
/?
$
然后捕获组返回所有内容,因此如果存在斜杠,则删除斜杠。
答案 2 :(得分:1)
这不起作用吗?
s?.endsWith( '/' )
所以...某种规范化功能,例如:
def normalise( String s ) {
( s ?: '' ) + ( s?.endsWith( '/' ) ? '' : '/' )
}
assert '/' == normalise( '' )
assert '/' == normalise( null )
assert 'home/tim/' == normalise( 'home/tim' )
assert 'home/tim/' == normalise( 'home/tim/' )
[edit]为了做到这一点(即:删除任何尾部斜杠),你可以这样做:
def normalise( String path ) {
path && path.length() > 1 ? path.endsWith( '/' ) ? path[ 0..-2 ] : path : ''
}
assert '' == normalise( '' )
assert '' == normalise( '/' )
assert '' == normalise( null )
assert 'home/tim' == normalise( 'home/tim' )
assert 'home/tim' == normalise( 'home/tim/' )