IndexOf-Methode gibt 0 zurück, wenn es sollte, hatte return -1 in C# / Java
Einem Freund von mir kam zu mir mit diesem seltsamen Verhalten, das ich nicht erklären kann, keine Einsicht Ansicht nach würden geschätzt werden.
Im Laufenden VS 2005 (C# 2.0) der folgende code zeigt das Verhalten
int rr = "test".IndexOf("");
Console.WriteLine(rr.ToString());
den obigen code, drucken Sie "0", die eindeutig zeigen, es sollte -1 zurückgeben
Diese auch in Java, wo die folgende Klasse zeigt das Verhalten:
public class Test{
public static void main(String[] args){
System.out.println("Result->"+("test".indexOf("")));
}
}
Im Laufenden Java 1.6.0_17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht eine Ausnahme von der Regel, sondern eine Natürliche Konsequenz wie
indexOf
undstartsWith
definiert sind.Du hast behauptet, dass
"test".indexOf("")
zurückkehren sollte-1
. Dies ist im wesentlichen äquivalent zu der Behauptung, dass"test".startsWith("")
zurückkehren solltefalse
. Warum ist das so? Obwohl dieser Fall ist ausdrücklich in der Dokumentation adressiert als eine Rückkehrtrue
ist dies nicht nur eine willkürliche Entscheidung.Wie würden Sie entscheiden
"test".startsWith("te")
zum Beispiel? Der einfachste Weg ist die Verwendung von Rekursion. Da beide strings beginnen mit dem Zeichen't'
rufen Sie"est".startsWith("e")
und das Ergebnis zurückgeben. Ebenso werden Sie rufen"st".startsWith("")
und das Ergebnis zurückgeben. Aber Sie wissen bereits, dass die Antwort sein solltetrue
, so dass ist, warum jeder string beginnt mit""
.Zitat aus der C# Dokumentation:
Das Verhalten, das Sie beschreiben, ist ganz wie erwartet (zumindest in C#).
0 richtig ist. Start bei position null und Sie kann (trivial) mit einer Zeichenfolge der Länge null. Ebenso, "" enthält "".
0 richtig ist. Die Javadocs darauf hin, dass
indexOf
funktioniert wie folgt:Jede Zeichenkette, beginnend mit
""
ist gleich der ursprünglichen Zeichenfolge (und jeder string beginnt mit""
), also die kleinstek
fürstr = ""
ist immer 0.Denken Sie an es auf diese Weise: IndexOf, wenn eine Zeichenfolge gesucht wird, beginnt an der position 0, versuchen Sie, die mit der Zeichenfolge, wenn es nicht passt, verschieben auf position 1, 2, etc. Beim Aufruf mit einem leeren string, wird versucht, die leere Zeichenfolge, mit der string ab der position 0 mit der Länge 0. Und Hurra, nichts ist gleich nichts.
Seite Hinweis: Es gibt keinen wirklichen Grund für die Verwendung
ToString
wenn Sie mit der Konsole.Write/WriteLine. Die Funktion ruft automatisch dieToString
- Methode des Objekts in Frage. (Es sei denn, überladen von ToString)Sollte 0 zurückgegeben werden. Sie sind auf der Suche nach der ersten Stelle einen leeren string, richtig? 🙂
Mehr Spaß macht php eigentlich nicht ein Weg besser ist job!
Nur für den Spaß von ihm. Es funktioniert auch wie in python
Python wirft einen ValueError statt der -1, die ist schön.