Entfernen Sie Zeichen vom Ende einer String-Scala

82

Was ist die einfachste Methode, um das letzte Zeichen am Ende eines Strings in Scala zu entfernen?

Ich finde, dass die Rubys String-Klasse einige sehr nützliche Methoden wie chop hat . Ich hätte "oddoneoutz" .headOption in Scala verwendet, aber es wird abgeschrieben. Ich möchte nicht in den übermäßig komplexen Bereich einsteigen:

string.slice(0, string.length - 1)

Bitte jemand sagt mir, dass es eine nette einfache Methode gibt, wie z. B. für etwas so Gemeinsames zu hacken.

Passend zum Satz
quelle

Antworten:

156

Wie wäre es mit dropRight, das in 2.8 funktioniert: -

"abc!".dropRight(1)

Welches produziert "abc"

Don Mackenzie
quelle
1
Das knappste, was ich mir für 2.7 einfallen lassen kann, ist "abc!". Split (". $) (0)
Don Mackenzie
3
Ups, ich meine "abc!". Split (". $") (0)
Don Mackenzie
Ausgezeichnet Danke Don, ich muss auf 2.8 upgraden :)
BefittingTheorem
13
string.init // padding for the minimum 15 characters
Walter Chang
quelle
Danke Walter, das ist genau die Methode, von der ich dachte, dass Scala sie haben würde. Wieder sind alle diese netten Methoden nur 2.8, also aktualisiere ich hier :)
BefittingTheorem
7
val str = "Hello world!"
str take (str.length - 1) mkString
David Winslow
quelle
+1, danke @Daniel Spiewak; führte mich zu "str drop (str.length -4)", bekommt die letzten 4 der Kreditkarte, genau das, was ich brauchte ;-)
virtualeyes
5

Wenn Sie die effizienteste Lösung suchen, verwenden Sie einfach:

str.substring(0, str.length - 1)
Andriy Plokhotnyuk
quelle
4
string.reverse.substring(1).reverse

Das ist im Grunde genommen Kotelett, oder? Wenn Sie sich nach einer Chop-Methode sehnen, schreiben Sie Ihre eigene StringUtilsBibliothek und fügen Sie sie in Ihre Projekte ein, bis Sie einen geeigneten, allgemeineren Ersatz gefunden haben.

Hey, schau, es ist in Commons.

Apache CommonsStringUtils .

Stefan Kendall
quelle
3
Es ist sicher Stefan. Ich hatte auf eine Methode gehofft, bei der Sie beim Betrachten des Codes verstehen, was los ist :) Was ich sage, ist: Für etwas so Einfaches wie "Letztes Zeichen aus Zeichenfolge entfernen" reverse.substring (1) .reverse ist irreführend. Vielen Dank für die Antwort
BefittingTheorem
Außerdem müssten Sie den String in einen StringBuilder einschließen, um eine umgekehrte Methode zu erhalten.
Fabian Steeg
2
Der erste Teil war meistens ein Witz: P. Jeder Java-Programmierer, der sich Ihre Scala ansieht, sollte mit StringUtils vertraut sein oder zumindest die Apache Commons-Bibliothek kennen, um den Import zu sehen und nicht beleidigt zu sein. Commons ist nützlich und sollte nach Möglichkeit verwendet werden. Ich habe festgestellt, dass die meisten Projekte irgendwann Commons enthalten, sodass die Nutzung der Bibliothek im Allgemeinen keine Kosten verursacht. Sie könnten StringUtils in Ihren Scala-Programmen sogar als su aliasen und es als su.chop (str) bezeichnen, was ziemlich prägnant und nicht so blöd ist wie die Verwendung von Teilzeichenfolgen.
Stefan Kendall
Schade, dass ein Implizit für StringUtils viel Arbeit bedeuten würde. Zeigt nur die Nichtübereinstimmung zwischen der Art und Weise, wie Scala-Benutzer und Java-Benutzer über Erweiterungsmethoden denken.
Ken Bloom
org.apache.commons.blah importieren. {StringUtils => su} ist viel Arbeit? Idealerweise würden Sie in einer Umgebung bereitstellen, in der diese Bibliotheken bereits eingerichtet sind, wie ich bereits sagte.
Stefan Kendall