Usuń znaki z końca łańcucha łańcuchowego


82

Jaka jest najprostsza metoda usunięcia ostatniego znaku z końca łańcucha w Scali?

Uważam, że klasa Rubys String ma kilka bardzo przydatnych metod, takich jak chop . W Scali użyłbym „oddoneoutz” .headOption, ale jest on amortyzowany. Nie chcę wchodzić w zbyt skomplikowane:

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

Niech ktoś mi powie, że jest fajna prosta metoda, taka jak siekanie na coś tak powszechnego.

Odpowiedzi:


156

Co powiesz na użycie dropRight, który działa w 2.8: -

"abc!".dropRight(1)

Który daje „abc”


1
Najbardziej zwięzły, jaki mogę wymyślić dla wersji 2.7, to „abc!”. Split („. $) (0)
Don Mackenzie,

3
Ups, mam na myśli „abc!”. Split („. $”) (0)
Don Mackenzie,

Świetnie dziękuję Don, będę musiał uaktualnić do 2.8 :)
BefittingTheorem

13
string.init // padding for the minimum 15 characters

Dzięki Walter, to jest dokładnie ta metoda, o której myślałem, że zastosuje Scala. Znowu wszystkie te fajne metody to tylko 2.8, więc uaktualnienie tutaj przychodzę :)
BefittingTheorem

7
val str = "Hello world!"
str take (str.length - 1) mkString

+1, dzięki @Daniel Spiewak; doprowadziło mnie do "str drop (str.length -4)", dostaje ostatnie 4 karty kredytowe, właśnie to, czego potrzebowałem ;-)
virtualeyes


4
string.reverse.substring(1).reverse

To w zasadzie posiekać, prawda? Jeśli tęsknisz za metodą chop, dlaczego nie napisać własnej StringUtilsbiblioteki i uwzględnić ją w swoich projektach, dopóki nie znajdziesz odpowiedniego, bardziej ogólnego zamiennika?

Hej, spójrz, to jest wspólne.

Apache CommonsStringUtils .


3
To na pewno Stefan. Miałem nadzieję na metodę, dzięki której kiedy spojrzysz na kod, zrozumiesz, co się dzieje :) Mówię to: Dla czegoś tak prostego jak "usuń ostatni znak z łańcucha" reverse.substring (1) .reverse to zwodniczy. Dzięki za odpowiedź
BefittingTheorem

Dodatkowo musisz zawinąć ciąg w StringBuilder, aby uzyskać metodę odwrotną.
Fabian Steeg

2
Pierwsza część to głównie żart: P. Każdy programista Java, który patrzy na twoją Scalę, powinien znać StringUtils lub przynajmniej znać bibliotekę Apache Commons, aby zobaczyć import i nie obrażać się. Commons jest przydatne i powinno się go używać tam, gdzie to możliwe. Odkryłem, że w pewnym momencie większość projektów zawiera wspólne elementy, więc generalnie nie ma kosztów korzystania z biblioteki. Możesz nawet aliasować StringUtils jako su w swoich programach scala i odnosić się do niego jako su.chop (str), co jest dość zwięzłe i nie tak kiepskie, jak używanie podciągów.
Stefan Kendall

Szkoda, że ​​niejawne dla StringUtils byłoby dużo pracy. Pokazuje tylko rozbieżność między sposobem, w jaki użytkownicy Scala i użytkownicy Java myślą o metodach rozszerzających.
Ken Bloom

import org.apache.commons.blah. {StringUtils => su} to dużo pracy? Idealnie byłoby, gdybyś wdrożył się w środowisku, w którym te biblioteki są już ustanowione, jak powiedziałem.
Stefan Kendall
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.