Ich verstehe nicht, warum die [Stringsubstring () -Methode von Java] ( Ссылка wird so angegeben, wie es ist. Ich kann nicht sagen, dass es an einer nummerierten Position beginnt und eine bestimmte Anzahl von Zeichen zurückgibt; ich muss das berechnen Endposition selbst. Und wenn ich eine Endposition hinter dem Ende der Zeichenfolge angeben, anstatt nur den Rest der Zeichenfolge für mich zurückgeben, löst Java eine Ausnahme aus.
Ich bin an Sprachen gewöhnt, bei denen substring () (oder substr ()) zwei Parameter benötigt: eine Startposition und eine Länge. Ist das objektiv besser als Java, und wenn ja, kannst du es beweisen? Was ist die beste Sprachspezifikation für substring (), die Sie gesehen haben, und wann wenn es jemals eine gute Idee für eine Sprache wäre, die Dinge anders zu machen? Ist diese IndexOutOfBoundsException, dass Java eine gute Design-Idee wirft oder nicht? Kommt das alles auf persönliche Vorlieben?
Es gibt Zeiten, in denen der zweite Parameter eine Länge ist bequemer, und es gibt Zeiten, wenn der zweite Parameter ist der "Offset zu stoppen, bevor" ist bequemer. Genauso gibt es Zeiten, in denen "wenn ich dir etwas gebe, das zu groß ist, gehe einfach ans Ende des Strings" ist praktisch, und es gibt Zeiten, wenn es einen Fehler anzeigt und wirklich eine Ausnahme auslösen sollte.
Der zweite Parameter, der eine Länge ist, ist nützlich, wenn Sie eine feste Länge des Feldes haben. Zum Beispiel:
%Vor%Der zweite Parameter, der ein Offset ist, ist nützlich, wenn Sie zu einem anderen begrenzten gehen:
%Vor%In der Regel ist das, das Sie verwenden möchten, das Gegenteil von dem, das auf Ihrer aktuellen Plattform bereitgestellt wird: •
Ich bin an Sprachen gewöhnt, wo substring () (oder substr ()) benötigt zwei Parameter: eine Startposition und a Länge. Ist das objektiv besser? als es Java tut, und wenn ja, Kannst du es beweisen?
Nein, es ist nicht objektiv besser. Es hängt alles vom Kontext ab, in dem Sie es verwenden möchten. Wenn Sie eine Teilzeichenfolge mit einer bestimmten Länge extrahieren möchten, ist sie schlecht, aber wenn Sie eine Teilzeichenfolge extrahieren möchten, die beispielsweise auf das erste Vorkommen von "." In der Zeichenfolge ist es besser, als wenn Sie zuerst eine Länge berechnen müssten. Die Frage ist: Welche Anforderung ist häufiger? Ich würde das letztere sagen. Natürlich wäre die beste Lösung, beide Versionen in der API zu haben, aber wenn Sie die längenbasierte immer benötigen, ist die Verwendung einer statischen Hilfsmethode nicht so schlimm.
Was die Ausnahme angeht, ja, das ist definitiv ein gutes Design. Sie haben nach etwas Bestimmtem gefragt, und wenn Sie diese spezifische Sache nicht bekommen können, sollte die API nicht versuchen zu erraten, was Sie stattdessen haben wollten - auf diese Weise werden Fehler schneller sichtbar.
Außerdem verfügt Java über einen alternativen Teilstring () -Methode, die die Teilzeichenfolge von einem Startindex bis zum Ende der Zeichenfolge zurückgibt.
zweiter Parameter sollte optional sein, erster Parameter sollte negative Werte akzeptieren.
Wenn Sie den 2. Parameter verlassen , wird er an das Ende der Zeichenfolge für Sie gehen, ohne dass Sie ihn berechnen müssen.
Nachdem ich ein Feedback erhalten habe, sehe ich, dass das Szenario mit dem zweiten Parameter als Index nützlich ist, aber bis jetzt scheinen alle diese Szenarios mit anderen Sprach- und API-Einschränkungen zu arbeiten. Zum Beispiel bietet die API keine bequeme Routine, um mir die Strings vor und nach dem ersten Doppelpunkt in der Eingabe-Zeichenfolge zu geben. Stattdessen erhalte ich den String-Index und den Call-Substring (). (Und deshalb erklärt der zweite Positionsparameter in substr () den gewünschten Index um 1, IMO.)
Es scheint mir, dass mit einem umfassenderen Satz von String-Verarbeitungsfunktionen im Toolkit der Sprache das Szenario mit dem zweiten Parameter als Index gegenüber dem zweiten Parameter als Länge verloren geht. Aber jemand posten Sie mir bitte ein Gegenbeispiel. :)
Tags und Links language-agnostic language-design substring substr