Удаление символов из конца String Scala

82

Каков самый простой способ удалить последний символ из конца строки в Scala?

Я считаю, что класс Rubys String имеет несколько очень полезных методов, например chop . Я бы использовал "oddoneoutz" .headOption в Scala, но он устарел. Я не хочу вдаваться в чрезмерную сложность:

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

Кто-нибудь, пожалуйста, скажите мне, что есть хороший простой метод, например, chop для чего-то столь распространенного.

Подходящая Теорема
источник

Ответы:

156

Как насчет использования dropRight, который работает в 2.8: -

"abc!".dropRight(1)

Что дает "abc"

Дон Маккензи
источник
1
Самым кратким, что я могу придумать для 2.7, является «abc!». Split («. $) (0)
Дон Маккензи
3
Упс, я имею в виду «abc!». Split («. $») (0)
Дон Маккензи
Отлично, спасибо, Дон, мне придется обновиться до 2.8 :)
BefittingTheorem
13
string.init // padding for the minimum 15 characters
Уолтер Чанг
источник
Спасибо, Уолтер, я думал, что у Scala есть именно такой метод. Опять же, все эти хорошие методы предназначены только для 2.8, так что обновляйтесь :)
BefittingTheorem
7
val str = "Hello world!"
str take (str.length - 1) mkString
Дэвид Уинслоу
источник
+1, спасибо @Daniel Spiewak; привел меня к "str drop (str.length -4)", получил последние 4 кредитной карты, как раз то, что мне было нужно ;-)
virtualeyes
5

Если вам нужно наиболее эффективное решение, просто используйте:

str.substring(0, str.length - 1)
Андрей Плохотнюк
источник
4
string.reverse.substring(1).reverse

Это в основном отбивная, правда? Если вам нужен метод измельчения, почему бы не написать свою собственную StringUtilsбиблиотеку и не включить ее в свои проекты, пока вы не найдете подходящую, более универсальную замену?

Эй, посмотри, это в свободном доступе.

Apache CommonsStringUtils .

Стефан Кендалл
источник
3
Конечно, это Стефан. Я надеялся на метод, который, когда вы посмотрите на код, вы поймете, что происходит :) Я говорю следующее: для чего-то столь же простого, как «удалить последний символ из строки» reverse.substring (1) .reverse - это вводящие в заблуждение. Спасибо за ответ
BefittingTheorem
Кроме того, вам нужно будет обернуть строку в StringBuilder, чтобы получить обратный метод.
Fabian Steeg
2
Первая часть была в основном шуткой: P. Любой Java-программист, смотрящий на ваш Scala, должен быть знаком со StringUtils или, по крайней мере, знать библиотеку Apache Commons, чтобы увидеть импорт и не обидеться. Commons полезен, и его следует использовать там, где это возможно. Я обнаружил, что большинство проектов в какой-то момент включают общие ресурсы, поэтому использование библиотеки обычно не требует затрат. Вы даже можете использовать псевдоним StringUtils как su в своих программах scala и называть его su.chop (str), что довольно лаконично и не так отстойно, как использование substring.
Стефан Кендалл
Жаль, что неявный StringUtils потребует много работы. Просто показывает несоответствие между тем, как пользователи Scala и пользователи Java думают о методах расширения.
Кен Блум,
import org.apache.commons.blah. {StringUtils => su} - это много работы? В идеале, как я уже сказал, вы должны выполнять развертывание в среде с уже установленными библиотеками.
Стефан Кендалл