Сравнение шаблонов строк в Java
Я хочу найти заданный шаблон строки во входном sting.
Например,
String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}"
Теперь мне нужно найти, содержит ли URL-адрес строки "/{item}/
". Пожалуйста, помогите мне.
Это пример. На самом деле мне нужно проверить, содержит ли URL-адрес строку, соответствующую "/{a-zA-Z0-9}/"
Ответы
Ответ 1
Для этого можно использовать класс Pattern
. Если вы хотите совместить только символы слова внутри {}
, тогда вы можете использовать следующее регулярное выражение. \w
является сокращением для [a-zA-Z0-9_]
. Если вы в порядке с _
, используйте \w
или используйте [a-zA-Z0-9]
.
String URL = "https://localhost:8080/sbs/01.00/sip/dreamworks/v/01.00/cui/print/$fwVer/{$fwVer}/$lang/en/$model/{$model}/$region/us/$imageBg/{$imageBg}/$imageH/{$imageH}/$imageSz/{$imageSz}/$imageW/{$imageW}/movie/Kung_Fu_Panda_two/categories/3D_Pix/item/{item}/_back/2?$uniqueID={$uniqueID}";
Pattern pattern = Pattern.compile("/\\{\\w+\\}/");
Matcher matcher = pattern.matcher(URL);
if (matcher.find()) {
System.out.println(matcher.group(0)); //prints /{item}/
} else {
System.out.println("Match not found");
}
Ответ 2
Это просто вопрос String.contains
:
if (input.contains("{item}"))
Если вам нужно знать, где это происходит, вы можете использовать indexOf
:
int index = input.indexOf("{item}");
if (index != -1) // -1 means "not found"
{
...
}
Это прекрасно подходит для сопоставления точных строк - если вам нужны реальные шаблоны (например, "три цифры, за которыми следует не более двух букв AC" ), тогда вы должны заглянуть в regular выражения.
EDIT: Хорошо, похоже, что вам нужны регулярные выражения. Возможно, вы захотите что-то вроде этого:
private static final Pattern URL_PATTERN =
Pattern.compile("/\\{[a-zA-Z0-9]+\\}/");
...
if (URL_PATTERN.matches(input).find())
Ответ 3
Если вы хотите проверить, присутствует ли какая-либо строка в другой строке, используйте что-то вроде String.contains
Если вы хотите проверить, присутствует ли какой-либо шаблон в строке, добавьте и добавьте шаблон с помощью.. *. Результат будет принимать строки, содержащие шаблон.
Пример: предположим, что у вас есть некоторое регулярное выражение a (b | c), которое проверяет, соответствует ли строка ab
или ac
.*(a(b|c)).*
проверяет, содержит ли строка ab
или ac
.
Недостатком этого метода является то, что он не даст вам местоположение совпадения.
Ответ 4
Вы можете сделать это, используя string.indexOf("{item}")
. Если результат больше -1 {item}
находится в строке