Le titre est l'ensemble de la question. Quelqu'un peut-il me donner une raison pourquoi cela se produit?
Réponses
Trop de publicités?Oui - parce qu'il ne fait que commencer avec la chaîne vide. En effet, la chaîne vide logiquement se produit entre chaque paire de caractères.
Mettez-le de cette façon: quelle définition de la "commence par" pourriez-vous donner qui pourrait empêcher cela? Voici une définition simple du terme "commence par" qui n'est pas le cas:
"x commence par y si le premier y.Length
personnages de x correspondent à celles de y."
Une solution de remplacement (l'équivalent) définition:
"x commence par y si x.Substring(0, y.Length).Equals(y)
"
Je vais essayer d'élaborer sur ce que Jon Skeet dit.
Disons que x, y et z sont des chaînes de caractères et l'opérateur + est en fait la concaténation, puis:
Si nous pouvons diviser z pour écrire z = x + y qui signifie que z commence par x. Parce que chaque chaîne de z peut être scindée pour z = "" + z il s'ensuit que chaque chaîne de caractères commence par "".
Ainsi, parce que ("" + "abcd") == "abcd" il en résulte que "abcd" commence par ""
Je vais commencer avec une relative fait que c'est plus facile à comprendre.
L'ensemble vide est un sous-ensemble de tous les ensembles.
Pourquoi? La définition du sous-ensemble d'états qui A
est un sous-ensemble de l' B
si chaque élément de l' A
est un élément de l' B
. À l'inverse, A
n'est pas un sous-ensemble de l' B
si il est un élément de A
qui n'est pas un élément de l' B
.
Maintenant fixer une B
. Je vais établir que l'ensemble vide est un sous-ensemble de l' B
. Je vais le faire en montrant qu'il n'est pas le cas que l'ensemble vide n'est pas un sous-ensemble de l' B
. Si l'ensemble vide n'étaient pas un sous-ensemble de l' B
alors que j'ai pu trouver un élément de l'ensemble vide qui n'est pas en B
. Mais l'ensemble vide n'ont pas tous les éléments, et donc je ne peux pas trouver un élément qui n'est pas en B
. Par conséquent, il n'est pas le cas que l'ensemble vide n'est pas un sous-ensemble de l' B
. Ainsi, l'ensemble vide doit être un sous-ensemble de l' B
.
Toute chaîne de caractères commence par la chaîne vide.
Tout d'abord, il faut reconnaître que notre définition de l' commence avec. Laissez - s
et t
être string
s Nous dire qu' s
commence par t
si s.Length >= t.Length
et le premier t.Length
caractères d' t
correspondent à ceux de l' s
. C'est, s.Length >= t.Length
et pour chaque Int32 index
tels que 0 <= index < t.Length
, s[index] == t[index]
est vrai. A l'inverse, nous dirions qu' s
ne démarre pas avec l' t
si la déclaration
s.Length < t.Length
ou s.Length >= t.Length
et il y a un Int32 index
tels que 0 <= index < t.Length
et s[index] != t[index]
est vrai. En clair, s
est plus courte que t
, ou, si non, il y a un personnage en t
ne correspond pas au caractère de la même position en s
.
Maintenant fixer une chaîne de caractères s
. Je vais établir qu' s
commence avec la chaîne vide. Je vais le faire en montrant qu'il n'est pas le cas qu' s
ne démarre pas avec la chaîne vide. Si s
ne démarre pas avec la chaîne vide, alors s.Length < String.Empty.Length
ou s.Length >= String.Empty.Length
et il y a un Int32 index
tels que 0 <= index < String.Empty.Length
. Mais s.Length >= 0
et String.Empty.Length
est égal à zéro alors il est impossible s.Length < String.Empty.Length
pour être vrai. De même, depuis `String.Empty.Length
est égal à zéro, il n'y a pas d' Int32 index
satisfaction 0 <= index < String.Empty.Length
. Donc
s.Length < String.Empty.Length
ou s.Length >= String.Empty.Length
et il y a un Int32 index
tels que 0 <= index < String.Empty.Length
est faux. Par conséquent, il n'est pas le cas qu' s
ne démarre pas avec la chaîne vide. Ainsi, s
doit commencer avec la chaîne vide.
Ce qui suit est une mise en œuvre de commence avec codé comme une extension d' 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;
}
Les deux ci-dessus en gras les faits sont des exemples de vacuously des déclarations exactes. Elles sont vraies en vertu du fait que les déclarations de les définir (sous-ensemble et commence avec) sont universels quantifications sur vide univers. Il n'y a pas d'éléments dans l'ensemble vide, donc il y a peut-être pas tous les éléments de l'ensemble vide et non dans un autre ensemble fixe. Il n'y a pas de caractères dans la chaîne vide, donc il ne peut pas être un personnage comme une position dans la chaîne vide ne correspond pas au personnage dans la même position dans certains autres chaîne fixe.
Cette méthode permet de comparer la valeur de paramètre de la sous-chaîne au début de cette chaîne qui est de la même longueur que la valeur, et renvoie une valeur qui indique si elles sont égales. Pour être égaux, la valeur doit être une chaîne vide (Vide), une référence à cette même instance, ou d'un match, le début de cette instance.
vrai si la séquence de caractères représenté par l'argument est un préfixe de la séquence de caractères représenté par cette chaîne; false dans le cas contraire. Notez également que la valeur true est renvoyée si l'argument est une chaîne vide ou égale à cette Chaîne de l'objet tel que déterminé par la equals(Object) de la méthode.
Disons "abcd".StartsWith("")
renvoie la valeur false.
si oui, alors ce n'est l'expression suivante eval, vrai ou faux:
("abcd".Substring(0,0) == "")
il s'avère que est évaluée comme vraie, de sorte que la chaîne ne démarre avec la chaîne vide ;-), ou en d'autres termes, la sous-chaîne "abcd" commençant à la position 0 et ayant de longueur 0 est égale à la chaîne vide "". Assez logique de l'omi.