Swiftで文字列が何で始まるか(接頭辞)または最後で終わるか(接尾辞)を確認する方法


102

Swift文字列が特定の値で開始または終了するかどうかをテストしようとしています。これらのメソッドは存在しません:

var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error

接頭辞と接尾辞の文字列も取得したいと思います。ここここで答えられているように、部分文字列を見つけることができましたが、Swiftでは範囲が非常に面倒です。

それを行う簡単な方法はありますか?

(私がドキュメントを読んでいときに私はその答えに出くわしました、そして私の検索用語に対してSOの答えが思いつかなかったので、ここに私のQ&Aを追加しています。)

回答:


204

Swift 4用に更新

文字列の始まりと終わりを確認する

hasPrefix(_:)およびhasSuffix(_:)メソッドを使用して、別の文字列との等価性をテストできます。

let str = "Hello, playground"

if str.hasPrefix("Hello") { // true
    print("Prefix exists")
}

if str.hasSuffix("ground") { // true
    print("Suffix exists")
}

実際のプレフィックスとサフィックスの部分文字列の取得

実際の接頭辞または接尾辞の部分文字列を取得するには、次のいずれかの方法を使用できます。簡単にするために、最初の方法をお勧めします。すべてのメソッドは使用しstr

let str = "Hello, playground"

方法1:(推奨)prefix(Int)およびsuffix(Int)

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground

これは私の意見ではより良い方法です。以下の方法2および3とは異なり、この方法は、インデックスが範囲外になってもクラッシュしません。文字列内のすべての文字を返すだけです。

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground

もちろん、コードに問題があることを通知するため、クラッシュが発生することもあります。以下の2番目の方法も検討してください。インデックスが範囲外になると、エラーがスローされます。

方法2:prefix(upto:)suffix(from:)

Swift Stringインデックスは、特殊文字(絵文字など)を考慮する必要があるため、注意が必要です。ただし、インデックスを取得すると、プレフィックスまたはサフィックスを簡単に取得できます。(に関する他の回答を参照しくださいString.Index。)

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground

範囲外に出ないようにしたい場合は、limitedBy(ここでもこの回答を参照してください)を使用してインデックスを作成できます。

方法3:下付き文字

Stringはコレクションなので、添え字を使用してプレフィックスとサフィックスを取得できます。

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground

参考文献


5

接頭辞と接尾辞が等しい

文字列に特定の文字列プレフィックスまたはサフィックスがあるかどうかを確認するには、文字列のhasPrefix( :)メソッドとhasSuffix( :)メソッドを呼び出します。どちらのメソッドも、String型の単一の引数を取り、ブール値を返します。

Apple Doc

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.