В регулярном выражении (Groovy) было сказано, что оператор "== ~" аналогичен оператору "==", но соответствует шаблону вместо "вычисления равенства". Не могли бы вы помочь мне понять реальную разницу между этими двумя с помощью небольшой пример?
x==y
является коротким для x.equals(y)
или x.compareTo(y)
- см. перегрузку оператора Groovy (где в java это в основном сравнивает идентификатор объекта).
Оператор ==~
- специально разработанный оператор сравнения, который поможет вам выполнить полное совпадение шаблона с строкой.
Сгенерированный код для оператора (например, разрыв кода 'xxx' ==~/xx?/
):
ScriptBytecodeAdapter.matchRegex("xxx", "xx?")
Из Groovy Regular Espressions:
Поскольку Matcher приводит к логическому вызову, вызывая его метод find, оператор = ~ согласуется с простым использованием оператора Perl = ~, когда он появляется как предикат (в 'if', 'while' и т.д.). Оператор "более строгий" == ~ требует точного совпадения всей строки предмета. Он возвращает логический, а не контрольный.
"картофель" == "картофель" на самом деле:
boolean result = ("potatoe"=="potatoe") //Compare Strings (GStrings in groovy)
"картофель" == ~ "картофель. *" означает:
Pattern p = Pattern.compile("potat.*");
Matcher m = p.matcher("potatoe");
boolean result = m.matches();
В первом примере, если вы сравните "картофель" с "картофелем. *", Результат будет ложным, потому что эти две строки не равны. Второй пример использует сопоставление, поэтому "potat. *" Больше не является простой строкой, но регулярное выражение и результат будут истинными.
==~
а не== ~
, что подразумевает другой сгенерированный код.