Warum gibt "abcd" .StartsWith ("") True zurück?
Titel ist die ganze Frage. Kann mir jemand einen Grund, warum dies passiert?
InformationsquelleAutor der Frage Dested | 2008-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Titel ist die ganze Frage. Kann mir jemand einen Grund, warum dies passiert?
InformationsquelleAutor der Frage Dested | 2008-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, weil es nicht anfangen mit der leeren Zeichenfolge. In der Tat, die leere Zeichenfolge logischerweise tritt zwischen jedem paar von Zeichen.
Sagen wir es so: was die definition von "beginnt mit", könnte Sie geben, ausschließen würde? Hier ist eine einfache definition von "beginnt mit" , nicht:
"x beginnt mit y, wenn die ersten
y.Length
Zeichen von x mit denen von y."Alternative (gleichwertige) definition:
"x beginnt mit y, wenn
x.Substring(0, y.Length).Equals(y)
"InformationsquelleAutor der Antwort Jon Skeet
Werde ich versuchen zu erarbeiten, was Jon Skeet sagte.
Sagen wir mal x, y und z Zeichenketten sind und die " + " - operator ist in der Tat die Verkettung, dann:
Wenn wir das aufteilen können, z schreiben z = x + y, z beginnt x mit.
Da jeder string z kann zerlegt werden in z = "" + z daraus folgt, dass jeder string beginnt mit "".
So, weil ("" + "abcd") == "abcd" daraus folgt, dass "abcd" beginnt mit","
InformationsquelleAutor der Antwort Petar Repac
Diese Methode vergleicht den value-parameter der substring am Anfang von diesem string, der dieselbe Länge wie Wert und gibt einen Wert zurück, der angibt, ob Sie gleich sind. Gleichberechtigt zu sein, muss der Wert eine leere Zeichenfolge (Leer), eine Referenz auf diese Instanz, oder den Anfang der Instanz.
.NETZ-String.StartsWith
true, wenn die Zeichenfolge vertreten durch das argument ist ein Präfix der Zeichenfolge vertreten durch dieses string; andernfalls false. Beachten Sie auch, dass true zurückgegeben wird, wenn das argument ein leerer string oder gleich dieses String-Objekts festgelegt durch die equals(Object) Methode.
Java-String.startsWith
InformationsquelleAutor der Antwort Firas Assaad
Beginnen werde ich mit einem verwandten der Tat, das ist einfacher zu verstehen.
Die leere Menge ist eine Teilmenge von jedem Satz.
Warum? Die definition von Teilmenge besagt, dass
A
ist eine Teilmenge vonB
wenn jedes element vonA
ist ein element derB
. UmgekehrtA
ist nicht eine Teilmenge derB
wenn es ein elementA
dass ist nicht ein element derB
.Nun fix einen Satz
B
. Ich werde feststellen, dass die leere Menge ist eine Teilmenge vonB
. Ich werde dies tun, indem Sie zeigen, dass es nicht der Fall ist, dass die leere Menge nicht Teilmenge vonB
. Wenn die leere Menge nicht Teilmenge vonB
dann ich finden konnte, ein element der leeren Menge, die nicht inB
. Aber die leere Menge keine Elemente und somit habe ich nicht finden können, ein element, das nicht inB
. Daher ist es nicht so, dass die leere Menge nicht Teilmenge vonB
. So, die leere Menge muss eine Teilmenge derB
.Jeder string beginnt mit dem leeren string.
Zuerst müssen wir uns einig über unsere definition von beginnt mit. Lassen Sie
s
undt
werdenstring
s Wir sagen, dasss
beginnt mitt
wenns.Length >= t.Length
und die erstent.Length
Zeichen vont
übereinstimmens
. Das ists.Length >= t.Length
und für jedenInt32 index
so dass0 <= index < t.Length
s[index] == t[index]
wahr ist. Umgekehrt, würden wir sagen, dasss
beginnt nicht mitt
wenn die Aussages.Length < t.Length
oders.Length >= t.Length
und es ist einInt32 index
so dass0 <= index < t.Length
unds[index] != t[index]
wahr ist. Im Klartext,
s
ist kürzer alst
oder, wenn nicht, es ist ein Zeichen int
entsprechen nicht dem Charakter der gleichen position ins
.Nun fix einen string
s
. Ich werde feststellen, dasss
beginnt mit dem leeren string. Ich werde dies tun, indem Sie zeigen, dass es nicht der Fall ist, dasss
beginnt nicht mit dem leeren string. Wenns
beginnt nicht mit dem leeren string danns.Length < String.Empty.Length
oders.Length >= String.Empty.Length
und es ist einInt32 index
so dass0 <= index < String.Empty.Length
. Abers.Length >= 0
undString.Empty.Length
gleich null ist, so ist es unmöglich fürs.Length < String.Empty.Length
um wahr zu sein. Ebenso, da `String.Leer.Längeis equal to zero, there is no
Int32 indexsatisfying
0 <= index < String.Leer.Länge`. Dahers.Length < String.Empty.Length
oders.Length >= String.Empty.Length
und es ist einInt32 index
so dass0 <= index < String.Empty.Length
ist falsch. Daher ist es nicht so, dass
s
beginnt nicht mit dem leeren string. Sos
muss beginnen mit dem leeren string.Folgenden ist eine Implementierung des beginnt mit codiert, das als Erweiterung
string
.Den beiden oben Fett gedruckten Fakten sind Beispiele von vacuously wahre Aussagen. Sie sind wahr, aufgrund der Tatsache, dass die Aussagen zu definieren (Teilmenge und beginnt mit) sind Universelle Quantifizierungen über leeren Universen. Es gibt kein Element in der leeren Menge, also kann es nicht sein, alle Elemente der leeren Menge nicht an einem anderen festen Satz. Es gibt keine Zeichen in die leeren string, so kann es nicht sein Charakter als irgendeine position in dem leeren string entsprechen nicht den Zeichen an der gleichen position in einer anderen festen string.
InformationsquelleAutor der Antwort jason
Sagen wir einfach
"abcd".StartsWith("")
gibt false zurück.wenn ja, dann was bedeutet der folgende Ausdruck eval, true oder false:
es stellt sich heraus, dass evals zu wahren, so dass die Zeichenfolge beginnen mit der leeren Zeichenfolge ;-), oder in anderen Worten, die den Teilstring "abcd" beginnend bei position 0 und 0 Länge gleich dem leeren string "". Ziemlich logisch imo.
InformationsquelleAutor der Antwort Pop Catalin
In C# dies ist, wie die Spezifikation es erzählt zu reagieren;
InformationsquelleAutor der Antwort blowdart
DIE RICHTIGE ANTWORT:
Es muss auch so sein sonst müsste man den Fall, wo
dann hätten wir Y2K alle immer wieder, weil die bank alle software, hängt davon ab, gleich Zeichenfolgen beginnend mit sich selbst bekommen unseren Konten gemischt und plötzlich Bill Gates wird mein Reichtum und ich habe ihm, und damn it! Schicksal ist nicht nur nett zu mir.
InformationsquelleAutor der Antwort user804965
Den ersten N Zeichen der beiden strings sind identisch. Wobei N die Länge des zweiten Strings, d.h. null.
InformationsquelleAutor der Antwort Ralph
Nur für das Protokoll,
String.StartsWith()
ruft intern die MethodeSystem.Globalization.CultureInfo.IsPrefix()
was macht die folgende check-explizit:InformationsquelleAutor der Antwort Tamas Czinege
Weil ein string beginnt auch mit "nichts".
InformationsquelleAutor der Antwort gizmo
Wenn Sie denken, dass es in regulären Ausdrücken, Bedingungen, macht es Sinn.
Jede Zeichenfolge (nicht nur "abcd", auch "" und "sdf\nff") ,
gibt true zurück, wenn die Auswertung des regulären Ausdrucks 'beginnt mit einem leeren string'.
InformationsquelleAutor der Antwort
In C#, der Grund, es gibt
true
ist, dass die Entwickler speziell codiert.Wenn Sie check out die QuellcodeSie finden die spezifische Logik zu behandeln eine leere Zeichenfolge:
InformationsquelleAutor der Antwort Grant Winney