Вы можете найти мое решение по вашему вопросу отсюда: Панель инструментов Android + вкладка Layout + Drawer, Скрыть панель инструментов при прокрутке и взять TabLayout в начало
Это работающий solutio но это не лучший способ реализовать эту анимацию. С помощью CoordiantorLayout
вы можете связать свои взгляды и прокручивать поведение.
Вы можете найти дополнительную информацию отсюда: https://developer.android.com/reference/android/support/design/ widget / CoordinatorLayout.html
Когда у меня будет время, я попытаюсь опубликовать пример кода для вас.
s = 'nowIsTheTime'
s.split /(?=[A-Z])/
=> ["now", "Is", "The", "Time"]
?=pattern
является примером позитивного взгляда. По сути, он соответствует точке в строке прямо перед шаблоном . Он не потребляет символы, то есть не включает шаблон как часть совпадения. Другой пример:
irb> 'streets'.sub /t(?=s)/, '-'
=> "stree-s"
В этом случае s
совпадает (только второй t
совпадает), но не заменяется. Благодаря @Bryce и его regexp doc link. Брайс Андерсон добавляет объяснение:
?=
в начале()
группы совпадений называется позитивным прогнозом, , что является лишь способом сказать, что в то время как regex смотрит на символы, чтобы определить, совпадает ли он, но не делает их частью матча.split()
обычно ест промежуточные символы, но в этом случае само совпадение пустое, поэтому там ничего нет.
Несмотря на то, что это вопрос о регулярном выражении в Ruby, и ответ от DigitalRoss является правильным и сияет своей простотой, я хочу добавить ответ на Java:
// this regex doesn't work perfect with Java and other regex engines
"NowIsTheTime".split("(?=[A-Z])"); // ["", "Now", "Is", "The", "Time"]
// this regex works with first uppercase or lowercase characters
"NowIsTheTime".split("(?!(^|[a-z]|$))"); // ["Now", "Is", "The", "Time"]
"nowIsTheTime".split("(?!(^|[a-z]|$))"); // ["now", "Is", "The", "Time"]
Ответ DigitalRoss является правильным, так как он обрабатывает общий случай, когда вы не знаете, строгий ли это регистр верблюдов (строчные буквы первого символа) или регистр Паскаля (прописные буквы первого регистра).
Если вы знаете, в какой из этих форм находится строка, или вы хотите навязать одну или другую, Inflector может это сделать.
Для случая Паскаля:
"NowIsTheTime".titleize
Для случая с верблюдом:
"nowIsTheTime".titleize.camelize :lower
Я знаю, что это старо, но стоит упомянуть о тех, кто может искать это. В рельсах вы можете сделать это: "NowIsTheTime".underscore.humanize
Вы пробовали
camelCaseString =~ /(Image)(Wide|Narrow)(Nice|Ugly)/
?
Ответ от DigitalRoss не распознает аббревиатуры, встроенные в CamelCase. Например, он разделит «MyHTMLTricks» на «My H T M L Tricks» вместо «My HTML Tricks».
Вот еще одна опция, основанная на функции AsSpaced()
в PmWiki , которая отлично справляется со своими задачами:
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*( |$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2')
=> "My HTML Tricks"
Другая вещь, которая мне нравится При таком подходе строка остается строкой, а не превращается в массив. Если вам действительно нужен массив, просто добавьте разделение в конце.
"MyHTMLTricks" \
.gsub(/([[:lower:]\\d])([[:upper:]])/, '\1 \2') \
.gsub(/([^-\\d])(\\d[-\\d]*( |$))/,'\1 \2') \
.gsub(/([[:upper:]])([[:upper:]][[:lower:]\\d])/, '\1 \2') \
.split
=> ["My", "HTML", "Tricks"]
Для справки, вот оригинальный код PHP от PmWiki.
function AsSpaced($text) {
$text = preg_replace("/([[:lower:]\\d])([[:upper:]])/", '$1 $2', $text);
$text = preg_replace('/([^-\\d])(\\d[-\\d]*( |$))/', '$1 $2', $text);
return preg_replace("/([[:upper:]])([[:upper:]][[:lower:]\\d])/", '$1 $2', $text);
}
I/p:- "ImageWideNice".scan(/[A-Z][a-z]+/).join(",")
O/p:- "Image,Wide,Nice"