как узнать, содержит ли groovy args определенную строку - PullRequest
7 голосов
/ 12 марта 2010
println args

println args.size()

println args.each{arg-> println arg}

println args.class

if (args.contains("Hello"))
    println "Found Hello"

при запуске выдает следующую ошибку:

[hello, somethingelse]
2
hello
somethingelse
[hello, somethingelse]
class [Ljava.lang.String;
Caught: groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.
String;.contains() is applicable for argument types: (java.lang.String) values:
[Hello]

почему я не могу сделать contains?

Ответы [ 2 ]

15 голосов
/ 12 марта 2010

Потому что args это String[], но не List<String>

Вы можете использовать

if (args.grep('Hello'))
    println "Found Hello"
1 голос
/ 15 марта 2010

Это потому, что args является массивом String (как в Java), а не String, взгляните на результат:

print args.getClass()

>>class [Ljava.lang.String;

Обратите внимание на обозначение [L .

Обычная строка приведет к:

>>class java.lang.String

Контейнеры Groovy не имеют операции contains () (String делает), однако объект java.lang.Ob of Groovy SDK имеет операцию grep () (показано в первом ответе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...