2009-10-08 9 views
4

Si j'ai une liste avec des éléments suivantsliste groovy indexOf

list[0] = "blach blah blah" 
list[1] = "SELECT something" 
list[2] = "some more text" 
list[3] = "some more text" 

Comment puis-je trouver l'index de l'endroit où la chaîne commence avec SELECT.

Je peux faire list.indexOf("SELECT something");

Mais ceci est une liste dynamique. SELECT something ne sera pas toujours SELECT something. il pourrait être SELECT somethingelse ou autre chose mais le premier mot sera toujours SELECT.

Existe-t-il un moyen d'appliquer regex à la recherche indexOf?

+0

Je s'égarer loin de RegEx en Java pour les problèmes de performance, mais jetez un oeil à http://java.sun.com/docs/books/tutoriel/essentiel/regex /. Je ne pense pas qu'il existe un moyen simple de faire cela, sauf itération manuelle à travers votre tableau. – bgw

Répondre

5

Vous pouvez utiliser une expression régulière en trouver:

def list = ["blach blah blah", "SELECT something", "some more text", "some more text"] 

def item = list.find { it ==~ /SELECT \w+/ } 

assert item == "SELECT something" 

list[1] = "SELECT somethingelse" 

item = list.find { it ==~ /SELECT \w+/ } 

assert item == "SELECT somethingelse" 
14
def list = ["blach blah blah", "SELECT something", "some more text", "some more text"] 
def index = list.findIndexOf { it ==~ /SELECT \w+/ } 

Cela renvoie l'index du premier élément qui correspond à la regex /SELECT \w+/. Si vous souhaitez obtenir les indices de tous éléments correspondants remplacent la deuxième ligne avec

def index = list.findIndexValues { it ==~ /SELECT \w+/ }