web-dev-qa-db-ja.com

Swiftの文字列の先頭(プレフィックス)または末尾(サフィックス)を確認する方法

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

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

プレフィックスとサフィックスの文字列も取得したいと思います。 here および here と答えられるように、部分文字列を見つけることができましたが、Swiftでは範囲が非常に苦痛です。

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

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

86
Suragch

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を使用してインデックスを作成できます(これも this answer を参照してください)。

方法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

参考文献

171
Suragch

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

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

Apple Doc

3
Gobi M