Вы можете использовать grepl
:
x <- "aa_bb_cc"
grepl("_.*_", x)
[1] TRUE
Шаблон регулярного выражения _.*_
соответствует любым двум подчеркиваниям во входной строке.
Теперь удаленный ответ @akrun дал возможность проверить весь вектор строк одновременно, используя stringr
. Мы все еще можем сделать это, используя grepl
, но мы должны использовать функцию apply
:
v1 <- c("aa_bbcc", "aa_bb_cc", "aabbcc")
sapply(v1, function(x) grepl("_.*_", x))
aa_bbcc aa_bb_cc aabbcc
FALSE TRUE FALSE
Я рекомендовал бы бросить a RuntimeException
от ServletContextListener.contextInitialized
.
Сервлет 2.3 не был очень ясен на этом, но Сервлет 2.4 добавил следующую деталь:
Некоторые исключения не происходят под стеком вызовов другого компонента в приложении. Примером этого является … ServletContextListener, который бросает необработанное исключение во время уведомления об инициализации контекста сервлета …. В этом случае Разработчик не имеет возможности обрабатывать исключение. Контейнер может ответить на все последующие запросы к веб-приложению с кодом состояния HTTP 500 для указания на ошибку приложения.
Так как это говорит, что механизм сервлета "может" отключить доступ к приложению, Вы могли бы найти сервер, который делает что-то еще. Однако Tomcat и WebLogic и отключают приложение, и единственная другая разумная вещь, о которой я могу думать, состояла бы в том, чтобы проигнорировать исключение. Я не вижу контейнер, который сделал тот являющийся очень популярным — таким образом, необходимо протестировать его в WebSphere сами.
Бросок RuntimeException, вероятно, сделает только тот сервлет недоступным. Более безопасный путь мог бы состоять в том, чтобы реализовать что-то как перехватчик Spring, который передаст ошибочной странице или чему-то, если проверки не удались. Тем путем Вы не должны препятствовать тому, чтобы приложение загрузилось, но можете обработать его более корректно во время выполнения.