Groovy - स्ट्रिंग की तुलना कैसे करें?


85

कैसे एक पैरामीटर के रूप में पारित किया है जो स्ट्रिंग की तुलना करने के लिए

निम्नलिखित विधि काम नहीं कर रही है।

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

21
Indiaजैसा है वैसा नहीं है india। पहला चरित्र अलग है
tim_yates

जवाबों:


88

यह रेखा:

if(str2==${str}){

होना चाहिए:

if( str2 == str ) {

${और }आप एक पार्स त्रुटि दे देंगे के रूप में वे केवल templating के लिए ग्रूवी स्ट्रिंग्स के अंदर इस्तेमाल किया जाना चाहिए


@ user1602802 यह ग्रूवी कंसोल में करता है। आपको क्या त्रुटियाँ हो रही हैं?
tim_yates

25
@ user1602802 क्या आप Indiaकिसी पूंजी के साथ तुलना कर रहे हैं Iऔर indiaकम-मामले की iतरह अपने प्रश्न को संपादित कर सकते हैं? India != india। वे भिन्न हैं।
tim_yates

118

यह एक उत्तर होना चाहिए

str2.equals (str)

अगर आप मामले को नजरअंदाज करना चाहते हैं

str2.equalsIgnoreCase (str)


18
डाउनवोटिंग क्योंकि मूल प्रश्न यह निर्दिष्ट नहीं करता था कि इसे देखभाल को अनदेखा करना चाहिए। इसके अलावा, groovy ==स्ट्रिंग तुलना के लिए ऑपरेटर का समर्थन करता है (जावा के विपरीत, जहां ==पहचान तुलना, स्ट्रिंग तुलना नहीं)।
ब्रायनमर्न्स

मैंने मामले के संवेदनशील होने के जवाब को समायोजित किया
ojblass

1
वहाँ Groovy में equalsIgnoreCase के लिए एक छोटा उर्फ ​​है?
साइमन लॉजिक

1
मुझे लगता है कि आप एक रैपर फ़ंक्शन बना सकते हैं जिसे ईआईसी या कुछ इसी तरह कहा जाता है। यह निर्भर करता है कि यह वास्तव में आपको कितना परेशान करता है।
ojblass

4
चेतावनी। Groovy में वैसा ही व्यवहार नहीं.equals() करता जैसा कि जावा में करता है। यहाँ उदाहरण - 'GString और String' तक नीचे जाएँ। मूल रूप से दोनों वस्तुओं को एक ही प्रकार के स्ट्रिंग वर्ग का होना चाहिए। चूंकि स्ट्रिंग वर्ग असाइनमेंट में निहित है - GString एक ग्रूवी भाषा का निर्माण है और स्ट्रिंग एक इनलाइन परिभाषा है, कुछ इस तरह ... वापस आ जाएगी । def foo = "foo""${foo}".equals("foo")false
21

6

यदि आप ऊपरी या लोअरकेस पर जाँच नहीं करना चाहते हैं तो आप निम्न विधि का उपयोग कर सकते हैं।

String str = "India" 
compareString(str) 

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

तो अब अगर आप "iNdIa" में परिवर्तन करते हैं, तो यह अभी भी काम करेगा, इसलिए आप मौका देते हैं कि आप एक टाइपो बनाते हैं।


42
str2.equalsIgnoreCase( str )शायद पढ़ने में आसान है :-)
tim_yates

1
@tim_yates न केवल पढ़ने में आसान है, यह अधिक सही भी है। केस रूपांतरण जैसे कि ये स्थानीय त्रुटियों (तुर्की I आदि) से ग्रस्त हैं।
ओहद श्नाइडर

1

सबसे छोटा तरीका ("समान नहीं" प्रिंट होगा क्योंकि स्ट्रिंग तुलना संवेदनशील है):

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

compareString("India")

0
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

-3

ग्रूवी में, null == nulltrue। रनटाइम पर, आपको नहीं पता होगा कि क्या हुआ था। जावा में, ==दो संदर्भों की तुलना कर रहा है।

यह बुनियादी प्रोग्रामिंग में बड़े भ्रम का कारण है, क्या यह बराबर का उपयोग करने के लिए सुरक्षित है। रनटाइम के दौरान, एक null.equals एक अपवाद देगा। आपको यह जानने का मौका मिला है कि क्या गलत हुआ।

विशेष रूप से, आपको दो मान मिलते हैं जो नक्शे में मौजूद नहीं हैं, ==उन्हें बराबर बनाता है।


-7

जब आप किसी स्ट्रिंग की तुलना करना चाहते हैं तो डीईएफ़ चर का उपयोग करें। उस प्रकार की तुलना के लिए नीचे दिए गए कोड का उपयोग करें।

डी चर नाम = शून्य

SQL क्वेरी आपको कुछ रिटर्न देती है। फ़ंक्शन का उपयोग वापसी प्रकार डीफ़ के साथ करें।

फंक्शननामे (डिफ वैरबैलेन का नाम) {

वापसी चर नाम

}

अगर ("$ चर नाम" == "सच") {

}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.