web-dev-qa-db-fra.com

Correspondance du modèle de chaîne dans Java

Je veux rechercher un modèle de chaîne donné dans une piqûre d'entrée.

Par exemple.

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}"

Maintenant, je dois rechercher si l'URL de la chaîne contient "/{item}/". Aidez-moi, s'il vous plaît.

Ceci est un exemple. En fait, j'ai besoin de vérifier si l'URL contient une chaîne correspondant à "/ {a-zA-Z0-9} /"

17
1355

Vous pouvez utiliser la classe Pattern pour cela. Si vous souhaitez faire correspondre uniquement les caractères Word à l'intérieur du {} vous pouvez alors utiliser l'expression rationnelle suivante. \w est un raccourci pour [a-zA-Z0-9_]. Si vous êtes d'accord avec _ puis utilisez \w ou bien utilisez [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");
}
35
Narendra Yadala

C'est juste une question de String.contains :

if (input.contains("{item}"))

Si vous avez besoin de savoir cela se produit, vous pouvez utiliser indexOf:

int index = input.indexOf("{item}");
if (index != -1) // -1 means "not found"
{
    ...
}

C'est bien pour faire correspondre les chaînes exactes - si vous avez besoin de vrais modèles (par exemple "trois chiffres suivis d'au plus 2 lettres AC"), alors vous devriez regarder expressions régulières .

EDIT: D'accord, il semble que vous voulez des expressions régulières. Vous voudrez peut-être quelque chose comme ça:

private static final Pattern URL_PATTERN =
    Pattern.compile("/\\{[a-zA-Z0-9]+\\}/");

...

if (URL_PATTERN.matches(input).find())
14
Jon Skeet

Si vous souhaitez vérifier si une chaîne est présente dans une autre chaîne, utilisez quelque chose comme String.contains

Si vous voulez vérifier si certains modèle est présent dans une chaîne, ajoutez et ajoutez le motif avec '. *'. Le résultat acceptera les chaînes contenant le modèle.

Exemple: supposons que vous ayez une expression régulière a(b|c) qui vérifie si une chaîne correspond à ab ou ac
.*(a(b|c)).* vérifiera si une chaîne contient un ab ou ac.

Un inconvénient de cette méthode est qu'elle ne vous donnera pas l'emplacement du match.

3
ChrisBlom

Vous pouvez le faire en utilisant string.indexOf("{item}"). Si le résultat est supérieur à -1 {item} est dans la chaîne

2
zeller