>

와이즈 비즈가있다  개체와 CharSequence  목적. 나는 가능한 String 와 평등 검사 (대소 문자 구분)에 대해 둘 다 비교하고 싶습니다.  가치. 중첩 된 null 를 사용했습니다.  너무 깨끗하고 최적화되지 않은 진술. 문제는 if 를 호출 할 수 없다는 것입니다   toString() 에서  CharSequence 객체. 평등 점검을 어떻게 수행 할 수 있습니까?

null

  • 답변 # 1

    귀하의 질문을 이해하는 한 다음과 같습니다. 두 개의 객체가 있으며 동일한 지 확인하고 싶습니다.

    우리가 원하는 것은 String.equalsIgnoreCase() 를 사용하는 것입니다 . 말 그대로 당신이 원하는 것입니다. CharSequence 객체가 null이 아닌 경우 CharSequence.toString() 때문에 매우 쉽습니다.  똑같은 순서로 똑같은 문자를 가진 문자열을 반환합니다.

    charSequence.toString().equalsIgnoreCase(otherString);
    
    
    불행히도 이것은 작동하지 않습니다. charsequence가 null이면 NullPointerException이 발생합니다. 따라서 charsequence가 null인지 확인하고 거기서 시작해야합니다.

    public boolean compareCSAndString(CharSequence cs, String string) {
      if(cs == null) {
        // If both are null, then they're equal
        return string == null; 
      }
      else {
        return cs.toString().equalsIgnoreCase(string);
      }
    }
    
    

    모든 상자를 체크합니다 :

    대소 문자를 구분하지 않습니다

    널값을 처리합니다

    정확하고 읽기 쉬운(중첩 된 if 없음)

  • 답변 # 2

    복잡한 코드와 중첩 된 if 는 없습니다 '에스. 아래는해야합니다.

    if(Objects.equals(charSeq,str) || (charSeq !=null && str !=null && charSeq.toString().equalsIgnoreCase(str))) {
       // todo
    }
    
    

  • 답변 # 3

    if (charSeq == str ||  (charSeq != null && str != null && charSeq.toString().equalsIgnoreCase(str))) {
       // todo
    }
    
    

    charSeq == str  둘 다 null 인 경우 처리 (이 경우에만 다른 클래스에 속하고 동일한 객체 참조를 식별 할 수 없으므로이 경우에만 처리)

  • 답변 # 4

    직접 equals() 사용   equals() 로 작동하지 않습니다  와이즈 비츠  서브 클래스는 상호 운용이 불가능합니다.
    당신은 CharSequence 를 사용할 수 있습니다   toString() 사이의 다리로 방법  어떤 경우에는 상호 운용 가능한 서브 클래스 ( CharSequence  그리고 String  예)) 그러나 모든 경우에 해당되는 것은 아닙니다.

    예 : StringBuilder 호출   toString() 에서  객체는 CharBuffer 로 특정 결과를 줄 수 있습니다  버퍼 현재 위치에 의존합니다.

    일관된 결과를 얻으려면 먼저 전달 된 객체의 유형을 확인한 다음 결과를 비교하는 다른 방법을 선택하지 않았다고 생각합니다. CharBuffer.toString() 사용   toString() 의 다리로  다른 유형을 다르게 처리합니다.

    브릿지 비교의 경우 StringBuilder/StringBuffer 만 예상한다고 가정합니다.  또는 StringBuilder  하위 클래스로 :

    String
    
    
    public boolean compareContent(CharSequence charSequence, String string) { if (!(charSequence instanceof StringBuilder || charSequence instanceof String){ // Exception, logging, more customized comparison or return false } return charSequence.toString().equalsIgnoreCase(string)); }

  • 이전 javascript - 선택한 이전 값을 ajax에 저장 한 다음 해당 값을 사용하여 페이지로드 후 선택
  • 다음 android - 개발 중 룸 데이터베이스 버전 번호 유지