регулярное выражение в заводной - PullRequest
1 голос
/ 20 июля 2010

Как найти, содержит ли строка '/' в качестве последнего символа.

Мне нужно добавить / к последнему символу, если его нет только

ex1 : def s = home/work 
    this shuould be home/work/     
ex2 : def s = home/work/
     this will remain same as home/work/

Mybad думал, что это просто,но не удается

спасибо заранее

Ответы [ 3 ]

3 голосов
/ 21 июля 2010

Указанный выше метод заканчивается с помощью метода и, вероятно, понятен большинству читателей. Для полноты вот решение с использованием регулярных выражений:

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)

Регулярное выражение можно прочитать как:

  • от начала строки: ^
  • захватить не жадную группу длиной от нуля или более символов: (.*?)
  • , заканчивающийся дополнительной косой чертой: /?
  • с последующим концом строки: $

В этом случае возвращается только группа захвата, поэтому слеш удаляется, если он присутствует.

3 голосов
/ 20 июля 2010

Вы можете использовать регулярное выражение или endsWith("/").

1 голос
/ 20 июля 2010

Разве это не работает?

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/' )

[править] Чтобы сделать это другим способом (т.е. удалить любые косые черты), вы можете сделать что-то вроде этого:

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/' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...