Groovy - 如何比较字符串?

use*_*802 71 groovy

如何比较作为参数传递的字符串

以下方法无效.

 String str = "saveMe"

 compareString(str)

 def compareString(String str){
    def str2 = "saveMe"
    if(str2==${str}){
      println "same"
    }else{
      println "not same"
    }
 }    
Run Code Online (Sandbox Code Playgroud)

也试过了

 String str = "India"

 compareString(str)

 def compareString(String str){
   def str2 = "india"
   if( str2 == str ) {
     println "same"
   }else{
     println "not same"
   }
 }    
Run Code Online (Sandbox Code Playgroud)

ojb*_*ass 98

这应该是一个答案

str2.equalsIgnoreCase(str)

  • 投反对票是因为原来的问题没有指定它应该忽略关心。此外,groovy 支持使用 == 运算符进行字符串比较(与 Java 不同,其中 == 进行身份比较,而不是字符串比较)。 (24认同)
  • 警告。`.equals()` 在 Groovy 中的行为与在 Java 中的行为不同。示例[此处](http://grails.asia/groovy-compare-string) -- 向下滚动到“GString 和 String”。基本上这两个项目必须属于同一类型的 String 类。由于 String 类在赋值中是隐式的 - GString 是 Groovy 语言构造,而 String 是内联定义,类似于 `def foo = "foo"` ... `"${foo}".equals("foo" )` 将返回 `false`。 (7认同)

tim*_*tes 73

这一行:

if(str2==${str}){
Run Code Online (Sandbox Code Playgroud)

应该:

if( str2 == str ) {
Run Code Online (Sandbox Code Playgroud)

${}会给你一个语法错误,因为它们只Groovy的字符串内部使用的模板

  • @ user1602802你是在比较`India`和大写的`I`和`india`和小写的`i`,就像编辑你的问题一样?`印度!=印度`.它们是不同的. (24认同)
  • 来自 Java,这可能看起来是错误的,但 `==` 运算符会像 Groovy 中的 `equals` 一样进行字符串比较。 (7认同)
  • if(str2 == str)即使这不起作用 (3认同)

Die*_*erg 6

如果您不想检查大写或小写,可以使用以下方法.

String str = "India" 
compareString(str) 

def compareString(String str){ 
  def str2 = "india" 
  if( str2.toUpperCase() == str.toUpperCase() ) { 
    println "same" 
  }else{ 
    println "not same" 
  } 
}
Run Code Online (Sandbox Code Playgroud)

所以,现在如果你将str改为"iNdIa"它仍然可以工作,所以你可以降低输入拼写错误的几率.

  • `str2.equalsIgnoreCase(str)`可能更容易阅读:-) (41认同)
  • @tim_yates 不仅更容易阅读,而且更正确。诸如此类的大小写转换很容易出现区域设置错误(土耳其语 I 等)。 (2认同)