2015-05-07 3 views
5

Zastanawiam się, czy istnieje jakiś fajny sposób sprawdzenia, czy podciągi łańcuchów pasują do wzorców.Jak sprawdzić, czy podciągi w tablicy ciągów pasują do wzorców z innych ciągów tablicowych

Na przykład mam listę ciągów (lub tablicę):

def Errors = ['File xyz cannot be created: No space left on device', 'File kjh has errors: some_error']

to mam listy ciągów znaków, na przykład def Patterns = ['Tests failed', 'No space left on device', 'Something goes wrong', ...some strings... ]

Chciałbym sprawdzić, czy niektóre elementy listy Patterns są podciągi elementów Errors.

W tym przykładzie należy zwrócić prawda, bo Patterns ma No space left on device i Errors ma 'File xyz cannot be created: No space left on device'.

Wiem, jak napisać to bardzo ulgy i nieefektywne za pomocą dwóch dla pętli i metody contains, ale wiem, że Groovy ma znacznie bardziej wydajne wbudowane metody. Próbowałem z findAll(), ale to nie działa w ogóle.

Czy masz jakieś pomysły? Czy istnieje sposób, aby uczynić go bardziej sprytnym?

Odpowiedz

4

Jawne nazywanie pattern i error:

patterns.find { pattern -> errors.find { error -> error.contains(pattern) } } // -> No space left on device 
patterns.any { pattern -> errors.find { error -> error.contains(pattern) } } // -> true 

zależności od tego,/ile chcesz znaleźć.

Albo jeszcze krócej:

patterns.find { errors.find { error -> error.contains(it) } } 
patterns.any { errors.find { error -> error.contains(it) } }