String
являются неизменяемыми, поэтому вы не найдете точного эквивалента. В то время как StringBuilder
обычно считается приемлемым строковым буфером, deleteCharAt
копирует весь резервный массив .
Вы можете использовать setLength
для этой цели. Обратите внимание, что как и std::string
, это не делает ничего, кроме изменения внутренней длины строкового буфера:
val string = StringBuilder("Hello")
string.append(", world!")
string.setLength(string.length - 1)
В качестве альтернативы, используйте более функциональный подход и работайте с неизменяемые значения:
var string = "Hello"
string += ", world!"
string = string.dropLast(1)
Как уже говорилось другими ответчиками / комментаторами, если то, что вы действительно хотите, является стеком или деком, см. Deque
и ArrayDeque
(учитывая, что вы не упомянули std::stack
или std::deque
в своем вопросе, я не верю, что это так; не говоря уже о том, что стек символов не само по себе очень полезно.)
Принимая во внимание комментарий ОП, это должно быть идиоматическое c решение:
enum class Move {
Left, Right, Forward
}
val moves = ArrayDeque<Move>()
// Push a move:
moves.push(Move.Left)
// Pop a move:
val lastMove = moves.pop()
См. также Почему я должен используйте Deque over Stack? для объяснения неудачной истории Java.