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.

Antworten:


156

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

"abc!".dropRight(1)

Welches produziert "abc"


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

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

+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)

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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.