1. ホーム
  2. string

[解決済み】文字列から最後の文字を削除する。Swift言語

2022-04-03 11:19:25

質問

Swiftを使用してString変数から最後の文字を削除するにはどうすればよいですか?ドキュメントでそれを見つけることができません。

以下はその例です。

var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)

解決方法は?

Swift 4.0 (Swift 5.0 も)

var str = "Hello, World"                           // "Hello, World"
str.dropLast()                                     // "Hello, Worl" (non-modifying)
str                                                // "Hello, World"
String(str.dropLast())                             // "Hello, Worl"

str.remove(at: str.index(before: str.endIndex))    // "d"
str                                                // "Hello, Worl" (modifying)

Swift 3.0

APIが少し増えました ふわふわ その結果、Foundation 拡張機能が少し変わりました。

var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

またはインプレース版。

var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)      // "Dolphi"

Zmeyさん、Rob Allenさん、ありがとうございます

Swift 2.0+ Way

これを実現するには、いくつかの方法があります。

Swift ライブラリの一部ではないにもかかわらず、Foundation 拡張を経由して。

var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

を使用することで removeRange() メソッド(これは を変更します。 その name ):

var name: String = "Dolphin"    
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"

を使用することで dropLast() 関数を使用します。

var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

旧String.Index(Xcode 6 Beta 4 +)の方法

以来 String の型は優れたUTF-8サポートを提供することを目的としているので、文字インデックス/範囲/部分文字列に Int 型を使用します。代わりに String.Index :

let name: String = "Dolphin"
let stringLength = count(name) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - 1
name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"

あるいは、(より実用的な例ですが、教育的な例ではありません。 endIndex :

let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"

見つけた これ を理解するための素晴らしい出発点です。 String.Index

旧来の(ベータ4以前の)方法

単純に substringToIndex() の長さより1つ短くしてください。 String :

let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"