Сравнение шаблонов строк в 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}/"

+16
29 окт. '11 в 9:27
источник поделиться
4 ответа

Для этого можно использовать класс 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");
}
+34
29 окт. '11 в 9:59
источник

Это просто вопрос 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())
+12
29 окт. '11 в 9:29
источник

Если вы хотите проверить, присутствует ли какая-либо строка в другой строке, используйте что-то вроде String.contains

Если вы хотите проверить, присутствует ли какой-либо шаблон в строке, добавьте и добавьте шаблон с помощью.. *. Результат будет принимать строки, содержащие шаблон.

Пример: предположим, что у вас есть некоторое регулярное выражение a (b | c), которое проверяет, соответствует ли строка ab или ac
.*(a(b|c)).* проверяет, содержит ли строка ab или ac.

Недостатком этого метода является то, что он не даст вам местоположение совпадения.

+3
02 мар. '12 в 9:40
источник

Вы можете сделать это, используя string.indexOf("{item}"). Если результат больше -1 {item} находится в строке

+2
29 окт. '11 в 9:29
источник

Посмотрите другие вопросы по меткам или Задайте вопрос