【问题标题】:Groovy - How to compare the string?Groovy - 如何比较字符串?
【发布时间】:2012-08-12 15:16:33
【问题描述】:

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

以下方法无效。

 String str = "saveMe"

 compareString(str)

 def compareString(String str){
    def str2 = "saveMe"
    if(str2==${str}){
      println "same"
    }else{
      println "not same"
    }
 }    

也试过了

 String str = "India"

 compareString(str)

 def compareString(String str){
   def str2 = "india"
   if( str2 == str ) {
     println "same"
   }else{
     println "not same"
   }
 }    

【问题讨论】:

  • Indiaindia 不同。第一个字符不同

标签: groovy


【解决方案1】:

这一行:

if(str2==${str}){

应该是:

if( str2 == str ) {

${} 会给你一个解析错误,因为它们只能在 Groovy 字符串中用于模板化

【讨论】:

  • @user1602802 它在 groovy 控制台中执行。你遇到了什么错误?
  • @user1602802 您是否将India 与大写Iindia 与小写i 进行比较,就像在编辑您的问题时一样? India != india。它们是不同的。
  • 来自 Java 这似乎是错误的,但 == 运算符会像 Groovy 中的 equals 那样进行字符串比较。
【解决方案2】:

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

String str = "India" 
compareString(str) 

def compareString(String str){ 
  def str2 = "india" 
  if( str2.toUpperCase() == str.toUpperCase() ) { 
    println "same" 
  }else{ 
    println "not same" 
  } 
}

所以现在如果你将 str 更改为“iNdIa”,它仍然可以工作,所以你会降低打错字的机会。

【讨论】:

  • str2.equalsIgnoreCase( str ) 可能更容易阅读:-)
  • @tim_yates 不仅更容易阅读,而且更正确。诸如此类的大小写转换很容易出现语言环境错误(土耳其语 I 等)。
【解决方案3】:

最短的方式(将打印“不一样”,因为字符串比较区分大小写):

def compareString = {
   it == "india" ? "same" : "not same"
}    

compareString("India")

【讨论】:

    【解决方案4】:

    这应该是一个答案

    str2.equals(str)

    如果你想忽略大小写

    str2.equalsIgnoreCase(str)

    【讨论】:

    • 投反对票,因为原始问题没有指定它应该忽略关心。此外,groovy 支持 == 运算符进行字符串比较(与 Java 相比,== 进行身份比较,而不是字符串比较)。
    • 我将答案调整为区分大小写
    • Groovy 中有 equalsIgnoreCase 的短别名吗?
    • 我认为您可以创建一个名为 eIC 或类似名称的包装函数。取决于它对您的实际影响程度。
    • 警告。 .equals() not 在 Groovy 中的行为与在 Java 中的行为相同。示例here -- 向下滚动到“GString 和字符串”。基本上这两个项目必须是相同类型的 String 类。由于 String 类在赋值中是隐式的——GString 是一个 Groovy 语言结构,而 String 是一个内联定义,类似 def foo = "foo" ... "${foo}".equals("foo") 将返回 false
    【解决方案5】:

    在 Groovy 中,null == null 得到一个 true。在运行时,您不会知道发生了什么。 在 Java 中,== 正在比较两个引用。

    这是在基本编程中造成很大混乱的原因,使用equals是否安全。在运行时, null.equals 将给出异常。你有机会知道出了什么问题。

    特别是,您从地图中不存在的键中获取两个值,== 使它们相等。

    【讨论】:

      【解决方案6】:

      当你想比较任何字符串时,使用 def 变量。使用下面的代码进行这种类型的比较。

      def 变量名 = null

      SQL 查询给你一些回报。使用返回类型为 def 的函数。

      定义函数名(定义变量名){

      返回变量名

      }

      if ("$变量名" == "true"){

      }

      【讨论】:

        【解决方案7】:
        String str = "saveMe"
        compareString(str)
        
        def compareString(String str){
          def str2 = "saveMe"
        
          // using single quotes
          println 'single quote string class' + 'String.class'.class
          println str + ' == ' + str2 + " ? " + (str == str2)
          println ' str = ' +  '$str' //  interpolation not supported
        
          // using double quotes, Interpolation supported
          println "double quoted string with interpolation " + "GString.class $str".class
          println "double quoted string without interpolation " + "String.class".class
          println "$str equals $str2 ? " + str.equals(str2) 
          println '$str == $str2 ? ' + "$str==$str2"
          println '${str == str2} ? ' + "${str==str2} ? "
        
          println '$str equalsIgnoreCase $str2 ? ' + str.equalsIgnoreCase(str2)   
        
          println '''
          triple single quoted Multi-line string, Interpolation not supported $str ${str2}
          Groovy has also an operator === that can be used for objects equality
          === is equivalent to o1.is(o2)
          '''
          println '''
          triple quoted string 
          '''
          println 'triple single quoted string ' + '''' string '''.class
        
          println """ 
          triple double quoted Multi-line string, Interpolation is supported $str == ${str2}
          just like double quoted strings with the addition that they are multiline
          '\${str == str2} ? ' ${str == str2} 
          """
          println 'triple double quoted string ' + """ string """.class
        } 
        

        输出:

        single quote string classclass java.lang.String
        saveMe == saveMe ? true
        str = $str
        double quoted string with interpolation class org.codehaus.groovy.runtime.GStringImpl
        double quoted string without interpolation class java.lang.String
        saveMe equals saveMe ? true
        $str == $str2 ? saveMe==saveMe
        ${str == str2} ? true ? 
        $str equalsIgnoreCase $str2 ? true 
        
        triple single quoted Multi-line string, Interpolation not supported $str ${str2}
        Groovy has also an operator === that can be used for objects equality
        === is equivalent to o1.is(o2)
        
        
        triple quoted string 
        
        triple single quoted string class java.lang.String
        
        triple double quoted Multi-line string, Interpolation is supported saveMe == saveMe
        just like double quoted strings with the addition that they are multiline
        '${str == str2} ? ' true 
        
        triple double quoted string class java.lang.String
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多