2015-10-06 18 views
53

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

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

また、接頭辞と接尾辞の文字列を取得したいと思います。 herehereのように部分文字列を見つけることができましたが、範囲はSwiftのような痛みです。

もっと簡単な方法はありますか?用に更新

(私はthe documentationを読んでいたとき、私は答えに出くわし、およびSOの答えは私の検索用語のために来なかったので、私はここに私のQ & Aを追加しています。)

答えて

101

文字列で始まり、あなたは別の文字列との平等をテストするためにhasPrefix(_:)hasSuffix(_:)メソッドを使用することができます

で終わるものを確認する4

スウィフト。実際の接頭辞または接尾辞部分文字列を取得するためには、実際の接頭辞と接尾辞部分列

を取得

let str = "Hello, playground" 

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

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

、次のいずれかの方法を使用することができます。私はそれがシンプルさのための最初の方法をお勧めします。これは私の意見では、より良い方法である(推奨)prefix(Int)suffix(Int)

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

:すべてのメソッドは、メソッド1

let str = "Hello, playground" 

としてstrを使用しています。以下のメソッド2と3とは異なり、インデックスが境界外になるとこのメソッドはクラッシュしません。文字列内のすべての文字を返します。

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

方法2:彼らは(絵文字のような)アカウントの特殊文字を考慮する必要があるためprefix(upto:)suffix(from:)

スウィフト文字列のインデックスはトリッキーです。しかし、インデックスを取得すると接頭辞や接尾辞を簡単に取得できます。 (String.Indexmy other answerを参照してください。)

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を使用して索引を作ることができる(再び、this answerを参照してください)。

方法3:添字

文字列のコレクションですので、あなたは接頭辞と接尾辞を取得するために添字を使用することができます。

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 

また読書

2

プレフィックスとサフィックス平等

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

Apple Doc

関連する問題