Groovy-문자열을 비교하는 방법?


83

매개 변수로 전달 된 문자열을 비교하는 방법

다음 방법은 작동하지 않습니다.

 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

답변:


87

이 줄 :

if(str2==${str}){

해야한다:

if( str2 == str ) {

${하고 }그들은 단지 템플릿에 대한 그루비 문자열 내에서 사용되어야한다, 당신에게 구문 분석 오류를 줄 것이다


@ user1602802 그것은 그루비 콘솔에서 수행됩니다. 어떤 오류가 발생합니까?
tim_yates

25
@ user1602802 질문에 대한 편집에서 India와 같이 대문자 Iindia소문자 i와 비교 하고 있습니까? India != india. 그들은 달라요.
tim_yates

117

답이되어야합니다

str2.equals (str)

대소 문자를 무시하고 싶다면

str2.equalsIgnoreCase (str)


17
원래 질문이주의를 무시해야한다고 명시하지 않았기 때문에 반대표를 던졌습니다. 또한 groovy는 ==문자열 비교를위한 연산자를 지원합니다 (Java와 달리 ==문자열 비교가 아닌 ID 비교).
brianmearns

나는 대소 문자 구분으로 답을 조정
ojblass

1
Groovy에 equalsIgnoreCase에 대한 짧은 별칭이 있습니까?
Simon Logic

1
eIC 또는 이와 유사한 래퍼 함수를 ​​만들 수 있다고 생각합니다. 실제로 얼마나 당신을 괴롭히는 지에 달려 있습니다.
ojblass

4
경고. Java에서와 같이 Groovy에서 동일하게 작동 .equals()하지 않습니다 . 여기의 예 - 'GString and String'까지 아래로 스크롤합니다. 기본적으로 두 항목은 동일한 유형의 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

1
@tim_yates는 읽기 쉬울뿐만 아니라 더 정확합니다. 이와 같은 대소 문자 변환은 로케일 오류가 발생하기 쉽습니다 (터키어 I 등).
Ohad Schneider

1

가장 짧은 방법 (문자열 비교는 대소 문자를 구분하므로 "같지 않음"으로 인쇄 됨) :

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

compareString("India")

-3

그루비에서 null == null얻는다 true. 런타임에는 무슨 일이 일어 났는지 알 수 없습니다. Java에서 ==두 참조를 비교합니다.

이것이 기본 프로그래밍에서 큰 혼란의 원인이됩니다. 런타임에 null.equals는 예외를 제공합니다. 무엇이 잘못되었는지 알 수있는 기회가 있습니다.

특히 맵에 존재하지 않는 키에서 두 값을 ==가져와 동일하게 만듭니다.


-7

문자열을 비교하려면 def 변수를 사용하십시오. 해당 유형의 비교를 위해 아래 코드를 사용하십시오.

정의 변수 이름 = null

SQL 쿼리는 약간의 결과를 제공합니다. 반환 유형 def와 함께 함수를 사용하십시오.

def functionname (def 변수 이름) {

반환 변수 이름

}

if ( "$ 변수 이름"== "true") {

}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.