Groovy-文字列を比較する方法は?


82

パラメータとして渡される文字列を比較する方法

次の方法は機能しません。

 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"
   }
 }    

20
Indiaと同じではありませんindia。最初の文字は異なります
tim_yates 2012

回答:


86

この行:

if(str2==${str}){

する必要があります:

if( str2 == str ) {

${そして}、彼らは唯一のテンプレートのためのGroovyの文字列内で使用されるべきであるとして、あなたにパースエラーになります


@ user1602802それはGroovyコンソールで行います。どのようなエラーが発生していますか?
tim_yates 2012

25
@ user1602802あなたは比較していますIndia資本金Iindia小文字でiあなたの質問に編集中のような? India != india。彼らは違う。
tim_yates 2012

117

これは答えになるはずです

str2.equals(str)

大文字と小文字を区別しない場合

str2.equalsIgnoreCase(str)


17
元の質問でケアを無視するように指定されていなかったため、反対票を投じました。また、groovyは==文字列比較の演算子をサポートしています(文字列比較で==はなくID比較を行うJavaとは対照的です)。
brianmearns

私は、大文字と小文字を区別することの答えを調整
ojblass

1
GroovyにequalsIgnoreCaseの短いエイリアスはありますか?
Simon Logic

1
eICなどと呼ばれるラッパー関数を作成できると思います。それが実際にどれだけあなたを悩ませているかに依存します。
ojblass

4
警告。GroovyではJavaと同じようには動作.equals()しませここでの例-「GStringandString」までスクロールダウンします。基本的に、両方のアイテムは同じタイプのStringクラスである必要があります。Stringクラスは割り当てに暗黙的に含まれているため、GStringはGroovy言語構造であり、Stringはインライン定義であるため、def foo = "foo"...のようなもの"${foo}".equals("foo")はを返しfalseます。
ingyhere

6

大文字または小文字を確認したくない場合は、次の方法を使用できます。

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」に変更しても機能するので、タイプミスをする可能性が低くなります。


42
str2.equalsIgnoreCase( str )おそらく読みやすいです:
tim_yates 2012

1
@tim_yatesは読みやすいだけでなく、より正確です。このようなケース変換では、ロケールエラー(トルコ語Iなど)が発生しやすくなります。
オハドシュナイダー2017

1

最短の方法(文字列の比較では大文字と小文字が区別されるため、「同じではない」と出力されます):

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

compareString("India")

-3

Groovyでは、をnull == null取得しtrueます。実行時には、何が起こったのかわかりません。Javaでは、==2つの参照を比較しています。

これは、equalsを安全に使用できるかどうかにかかわらず、基本的なプログラミングで大きな混乱を引き起こす原因です。実行時に、null.equalsは例外を与えます。何が悪かったのかを知るチャンスがあります。

特に、マップに存在しないキーから2つの値を取得し、==それらを等しくします。


-7

文字列を比較する場合は、def変数を使用します。そのタイプの比較には、以下のコードを使用してください。

def変数名= null

SQLクエリはあなたにいくらかのリターンを与えます。戻り値の型defで関数を使用します。

def functionname(def variablename){

変数名を返す

}

if( "$ variable name" == "true"){

}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.