1. ホーム
  2. string

[解決済み] Swift で文字列から最初の文字を削除する最も簡潔な方法は何ですか?

2022-05-12 07:57:44

質問

文字列から1文字目を削除したい。今のところ、一番簡潔に思いつくのは

display.text = display.text!.substringFromIndex(advance(display.text!.startIndex, 1))

文字列をインデックス化するために Int で文字列をインデックスできないことは知っていますが、この解決法は非常に冗長なように思えます。私が見落としている別の方法があるのでしょうか?

どのように解決するのですか?

もし、あなたが Swift 3 を使用している場合、この回答の2番目のセクションは無視できます。良いニュースは、これが今、実際に再び簡潔であるということです! Stringの新しいremove(at:)メソッドを使用するだけです。

var myString = "Hello, World"
myString.remove(at: myString.startIndex)

myString // "ello, World"


私はグローバルな dropFirst() という関数があります。

let original = "Hello" // Hello
let sliced = dropFirst(original) // ello

短く、明確で、Sliceableプロトコルに準拠するものであれば、何でも使えます。

Swift 2を使用している場合 を使用している場合、この回答は変更されました。あなたはまだdropFirstを使うことができますが、文字列から最初の文字を削除することなく characters プロパティから最初の文字を削除し、その結果を文字列に変換することなく、dropFirst を使用できます。

let original = "Hello" // Hello
let sliced = String(original.characters.dropFirst()) // ello

もう一つの方法は、suffix関数を使って、文字列の UTF16View . もちろん、これも後でStringに変換する必要があります。

let original = "Hello" // Hello
let sliced = String(suffix(original.utf16, original.utf16.count - 1)) // ello

これらはすべて、私が最初に提供した解決策は、Swiftの新しいバージョンでこれを行うための最も簡潔な方法ではないことが判明したと言うことです。私は、@chrisの解決策に戻ることをお勧めします。 removeAtIndex() を使用する @chris のソリューションに戻ることをお勧めします。

var original = "Hello" // Hello
let removedChar = original.removeAtIndex(original.startIndex)

original // ello

また、下のコメントで @vacawama が指摘しているように、元の String を変更しない別のオプションとして、substringFromIndex を使用することもできます。

let original = "Hello" // Hello
let substring = original.substringFromIndex(advance(original.startIndex, 1)) // ello

また、Stringの先頭と末尾の文字を削除したい場合は、substringWithRangeを使用することができます。ただ、次のような場合に備えて startIndex + n > endIndex - m .

let original = "Hello" // Hello

let newStartIndex = advance(original.startIndex, 1)
let newEndIndex = advance(original.endIndex, -1)

let substring = original.substringWithRange(newStartIndex..<newEndIndex) // ell

最後の行は添え字記法で書くこともできます。

let substring = original[newStartIndex..<newEndIndex]