문제

제목은 전체 질문입니다. 누군가 나에게 이런 일이 일어나는 이유를 줄 수 있습니까?

도움이 되었습니까?

해결책

예 - 빈 문자열로 시작하기 때문입니다. 실제로, 빈 문자열은 모든 문자 쌍 사이에서 논리적으로 발생합니다.

이런 식으로 말하십시오 : "시작"의 어떤 정의는 당신이 이것을 배제 할 수 있습니까? 다음은 "시작"의 간단한 정의입니다.

"X는 첫 번째 경우 y로 시작합니다 y.Length X의 문자는 Y의 문자와 일치합니다. "

대안 (동등한) 정의 :

"X는 y if로 시작합니다 x.Substring(0, y.Length).Equals(y)"

다른 팁

나는 Jon Skeet의 말에 대해 자세히 설명하려고 노력할 것입니다.

x, y 및 z가 문자열이고 + 연산자가 실제로 연결이라고 가정 해 봅시다.

z를 쪼개기 위해 z = x + y를 쓸 수 있다면 z가 x로 시작한다는 것을 의미합니다. 모든 문자열 z는 z = "" + z로 분할 될 수 있으므로 모든 문자열은 ""로 시작합니다.

따라서 ( "" + "abcd") == "ABCD"는 "ABCD"가 시작됩니다. "

이 메소드는 값 매개 변수를 값과 동일한 길이 인이 문자열의 시작 부분에서 하위 문자열과 비교하고 동일인지를 나타내는 값을 반환합니다. 동일하려면 값은 빈 문자열 (빈), 동일한 인스턴스에 대한 참조 이거나이 인스턴스의 시작과 일치해야합니다.

.NET string.startswith

인수로 표시되는 문자 시퀀스 가이 문자열로 표시되는 문자 시퀀스의 접두사 인 경우. 그렇지 않으면 거짓. 인수가 빈 문자열이면 참이되게됩니다. 또는 Equals (Object) 메소드에 의해 결정된이 문자열 객체와 동일합니다.

Java String.startswith

이해하기 쉬운 관련 사실부터 시작하겠습니다.

빈 세트는 모든 세트의 하위 집합입니다.

왜요? 그만큼 정의서브 세트 그것을 말합니다 A 서브 세트입니다 B 모든 요소가 있다면 A 요소입니다 B. 거꾸로, A 하위 집합이 아닙니다 B 요소가있는 경우 A 그것은 요소가 아닙니다 B.

이제 세트를 수정하십시오 B. 나는 빈 세트가 B. 빈 세트가의 하위 집합이 아니라는 것은 그렇지 않다는 것을 보여줌으로써 이것을 할 것입니다. B. 빈 세트가 하위 집합이 아닌 경우 B 그런 다음 빈 세트의 요소를 찾을 수 있습니다. B. 그러나 빈 세트에는 요소가 없으므로 안에없는 요소를 찾을 수 없습니다. B. 따라서 빈 세트가 하위 집합이 아닌 경우가 아닙니다. B. 따라서 빈 세트는 B.

모든 문자열은 빈 문자열로 시작합니다.

먼저, 우리는 우리의 정의에 동의해야합니다 시작합니다. 허락하다 s 그리고 t ~이다 string우리는 그렇게 말합니다 s 시작합니다 t 만약에 s.Length >= t.Length 그리고 첫 번째 t.Length 캐릭터 t 그것들과 일치합니다 s. 그건, s.Length >= t.Length 그리고 모든 것에 대해 Int32 index 그렇게 0 <= index < t.Length, s[index] == t[index] 사실이다. 반대로, 우리는 그렇게 말할 것입니다 s 시작하지 않습니다 t 성명서 인 경우

s.Length < t.Length 또는 s.Length >= t.Length 그리고 Int32 index 그렇게 0 <= index < t.Length 그리고 s[index] != t[index]

사실이다. 평범한 영어로 s 보다 짧습니다 t, 그렇지 않다면, 캐릭터가 있습니다. t 캐릭터를 동일한 위치와 일치시키지 않습니다 s.

이제 문자열을 수정하십시오 s. 나는 그것을 확립 할 것이다 s 빈 문자열로 시작합니다. 나는 그것이 사실이 아니라는 것을 보여줌으로써 이것을 할 것이다. s 빈 문자열로 시작하지 않습니다. 만약에 s 그런 다음 빈 문자열로 시작하지 않습니다 s.Length < String.Empty.Length 또는 s.Length >= String.Empty.Length 그리고 Int32 index 그렇게 0 <= index < String.Empty.Length. 하지만 s.Length >= 0 그리고 String.Empty.Length 0과 같아서 불가능합니다 s.Length < String.Empty.Length 사실입니다. 마찬가지로``string.empty.length 이후is equal to zero, there is noint32 색인satisfying0 <= index <string.empty.length`입니다. 그러므로

s.Length < String.Empty.Length 또는 s.Length >= String.Empty.Length 그리고 Int32 index 그렇게 0 <= index < String.Empty.Length

거짓입니다. 그러므로 그렇지 않습니다 s 빈 문자열로 시작하지 않습니다. 따라서, s 빈 문자열로 시작해야합니다.

다음은 구현입니다 시작합니다 연장으로 코딩되었습니다 string.

public static bool DoStartsWith(this string s, string t) {
    if (s.Length >= t.Length) {
        for (int index = 0; index < t.Length; index++) {
            if (s[index] != t[index]) {
                return false;
            }
        }
        return true;
    }
    return false;
}

위의 두 가지 대담한 사실은 그 예입니다 진정한 진정한 진술. 그것들은 진술이 그들을 정의한다는 사실 때문에 사실입니다.서브 세트 그리고 시작합니다) 이다 보편적 정량화 빈 우주 위에. 빈 세트에는 요소가 없으므로 다른 고정 세트에는 빈 세트의 요소가 없을 수 있습니다. 빈 문자열에는 문자가 없으므로 비어있는 문자열의 일부 위치가 다른 고정 문자열에서 동일한 위치에있는 문자와 일치하지 않기 때문에 문자가있을 수 없습니다.

그냥 말합시다 "abcd".StartsWith("") 거짓을 반환합니다.

그렇다면 다음 표현식은 참 또는 거짓으로 무엇을 평가합니까?

 ("abcd".Substring(0,0) == "")

문자열은 진정으로 evals이라는 것이 밝혀졌습니다. 그래서 문자열은 빈 문자열로 시작하거나, 즉, 위치 0에서 시작하고 0 길이를 갖는 "ABCD"의 하위 문자열이 빈 문자열과 같다 "고 말합니다. 꽤 논리적 인 IMO.

C#에서 이것은 방법입니다 사양 반응하라고 말한다.

동일하려면 값은 빈 문자열 (빈), 동일한 인스턴스에 대한 참조 이거나이 인스턴스의 시작과 일치해야합니다.

"ABCD".StartSwith ( "")가 True를 반환하는 이유는 무엇입니까?

진짜 답변 :

그렇지 않으면 그렇게해야합니다.

    "".startsWith("") == false 
    "".equals("") == true

    but yet

    "a".startsWith("a") == true
    "a".equals("a") == true

그리고 우리는 동등한 문자열에 의존하는 모든 은행 소프트웨어가 우리 계정을 섞어 놓고 갑자기 Bill Gates가 내 부를 가질 것이고 나는 그를 가질 것이기 때문에 우리는 다시 Y2K를 다시 가질 것입니다! 운명은 나에게 그런 종류가 아닙니다.

두 문자열의 첫 번째 N 문자는 동일합니다. n 두 번째 문자열의 길이, 즉 0입니다.

기록만을 위해서, String.StartsWith() 내부적으로 방법을 호출합니다 System.Globalization.CultureInfo.IsPrefix() 다음을 명시 적으로 확인합니다.

if (prefix.Length == 0)
{
    return true;
}

문자열은 "아무것도"와 잘 시작하기 때문입니다.

정규 표현 용어로 생각하면 의미가 있습니다. 모든 문자열 ( "abcd", "또한" "및"sdf nff "가 아님)은 '빈 문자열로 시작'의 정규 표현식을 평가할 때 true를 반환합니다.

C#에서는 그것이 돌아 오는 이유입니다 true 개발자는 구체적으로 코딩 된 것입니다.

당신이 확인하면 소스 코드, 빈 문자열을 처리하기위한 특정 논리를 찾을 수 있습니다.

public Boolean StartsWith(String value)
{
    return StartsWith(value, StringComparison.CurrentCulture);
}

public Boolean StartsWith(String value, StringComparison comparisonType)
{
    ...

    if (value.Length == 0)
    {
        return true;
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top