제목별로 문자열 비교를 위해 어떤 연습을 사용합니까? 그 이유는 무엇입니까?문자열 비교 - strA.ToLower() == strB.ToLower() 또는 strA.Equals (strB, StringComparisonType)?
답변
플랫폼을 지정하지 않았지만 .NET을 추측하고 있습니다. 후자의 형식을 사용 하시길 강력히 권합니다. 왜냐하면 사례 비교는 예상대로 간단하지 않기 때문입니다. (여분의 문자열을 만드는 것을 피할 수도 있지만 다른 문제입니다.) 예를 들어, 터키에서 실행 중일 때 "mail"및 "MAIL"이 표시되면 코드에서 수행 할 작업을 원하십니까? ToLower
을 사용하면 false를 반환하고 CurrentCultureIgnoreCase
을 사용하는 경우와 마찬가지로 - InvariantCultureIgnoreCase
을 사용하면 true를 반환합니다. 데이터의 출처와 그로 인해 성취하고자하는 목표에 대해 생각할 필요가 있습니다.
자세한 내용과 안내는 MSDN의 recommendations for using strings을 참조하십시오.
다른 말하자면, 나는 후자가 더 효과적으로 당신의 의도를 표현한다고 말하고 싶습니다. 실제로 문자열의 소문자 값에 관심이 없습니다. 에서 대소 문자를 구별하는 등식에 관심이 있습니다. 정확히 두 번째 형식이 표현하는 것입니다.
첫 번째 것보다 두 번째 것의 사용이 더 좋습니다. 왜냐하면 두 번째 유형은 모든 언어로 지원 될 것이므로 사용하는 것이 더 편리 할 것입니다.
Equals
은 3 대신 1 개의 문자열 연산이므로 호출 규모가 더 좋습니다.
StringComparison.OrdinalIgnoreCase
옵션을 사용하여 케이스를 비교할 때 최상의 성능을 얻을 수 있습니다. 그러나 문화적 차이를 고려하지 않기 때문에 항상 원하는 결과를 얻을 수있는 것은 아닙니다.
비교를 위해 대소 문자를 변경하려면 ToLower
대신 ToUpper
을 사용하는 것이 좋습니다. 일부 이국적인 문자는 대문자에서 소문자로 제대로 변환되지 않지만 대문자에서 소문자로 변환됩니다.
대부분의 경우 성능이 중요하지 않으므로 상황에 가장 적합한 대안을 사용해야합니다.
사용중인 언어를 지정하지 않았지만 ==
연산자에서 C#처럼 보입니다. VB를 사용하려면 =
연산자가 문자열 클래스의 동등한 opreator를 사용하지 않고 VB 비교 논리를 약간 다르게 사용하는 것이 좋습니다.
터키에서 "mail"및 "MAIL"의 예를 자세히 설명해 주실 수 있습니까? 이 경우 False를 기대해야하는 이유는 무엇입니까? –
@ValentynVynogradskiy : 터키 (터키 문화/로케일 사용)에서 대문자'mail '을 사용하면'MAIL'을 얻지 못하기 때문에 ...'I'는 다르게 대문자가됩니다. –