2015-11-15 6 views
0

J'essaye de créer une méthode en Java qui vérifie si un index d'une chaîne est contenu entre parenthèses. Actuellement, je vérifie juste si ) ou ( vient en premier, mais cela ne fonctionne pas bien pour les parenthèses imbriquées.Vérifiez si l'index est entre parenthèses

private static boolean inParentheses(String str, int index) { 
    int nextOpen = str.indexOf('(', index); 
    int nextClose = str.indexOf(')', index); 
    return nextClose < nextOpen && nextOpen != -1 || nextOpen == -1 && nextClose != -1; 
} 
+0

odeurs récursion – px5x2

+0

Y at-il un comportement spécial pour les parenthèses qui ne sont pas fermées? Que faire si l'index se réfère à une parenthèse elle-même? – Linus

Répondre

-1

Si vous pouvez supposer que les parenthèses sont toutes fermées correctement, il revient à compter le nombre de parenthèses ouvertes et fermées d'un côté de votre index. S'ils sont égaux, vous n'êtes pas entre parenthèses, sinon vous l'êtes. Méfiez-vous de la réponse lorsque votre index fait référence à une parenthèse.

int open_par = 0; 
for(int i=index;i--!=0;){ 
    if(str.charAt(i)=='(') 
     open_par++; //count open parenthesis 
    if(str.charAt(i)==')') 
     open_par--; //count closed parenthesis 
} 
return open_par>0; //if open parenthesis exceeds closed parenthesis 
0

Donc, vous voulez d'abord vérifier quel est le premier caractère de la chaîne. Disons que vous avez la chaîne ipwnmice et vous vouliez voir si elle avait le caractère ( ou le caractère ) à l'avant même de celui-ci.

String yourUsername = "ipwnmice"; 
char first = yourUsername.charAt(0); 
System.out.println(first); 

sortie:

i 

Maintenant, si vous voulez voir si le premier caractère est ( ou ) ajouter juste une instruction if autour du code!

String parenthasis = "(Hello)" 
char first = parenthasis.charAt(0); 

if(first.equals("()){ 
//CONTAINS (OR) AS FIRST CHARACTER 
} else{ 
//DOESNT CONTAIN (OR) AS FIRST CHARACTER 
} 

Il pourrait ne pas être au début de la chaîne:

Utilisez la méthode .contains().

if(String.contains((||)){ 

} 

C'est tout. Récupère le caractère de la première lettre de la chaîne et vérifie s'il contient ( ou ). Si vous avez trouvé cette réponse utile, cochez la meilleure réponse. Si vous avez besoin d'aide, n'hésitez pas à demander, je suis heureux de vous aider.

{Rich} 
+0

Mon problème est que la chaîne ne commencera pas forcément par un '('.) Les parenthèses peuvent s'ouvrir au milieu de la chaîne Quelque chose comme: 'texte aléatoire (plus de texte (texte) autre texte) plus de texte au end' – ipwnmice

+0

@ipwnmice J'ai mis à jour ma réponse –

+0

@ipwnmice Utilisez la méthode '.contains()' –