1. ホーム
  2. swift

[解決済み] swift で文字列から数字以外の文字を削除する

2022-12-19 02:19:22

質問

数値だけであるはずの未知のデータを解析する必要があります。

Swiftでこれを行うための新しい方法はありますか?私がオンラインで見つけることができるすべては、物事を行う古いCの方法であるように思えます。

私は見ています stringByTrimmingCharactersInSet - を見ています。私の入力は、文字列の最初か最後に空白または特殊文字があるだけだと思うからです。このような場合に使用できる組み込みの文字セットはありますか?それとも、自分で作成する必要がありますか?

私は、次のようなものがあることを期待していました。 stringFromCharactersInSet() のように、有効な文字だけを指定して保存できるようなものがあればいいなと思いました。

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

stringFromCharactersInSet()のように、有効な文字だけを指定して保持できるものがあればいいなと思ったのですが、どうでしょうか?

あなたは trimmingCharactersinverted という文字セットを使って、文字列の先頭または末尾から文字を削除します。Swift 3以降では

let result = string.trimmingCharacters(in: CharacterSet(charactersIn: "0123456789.").inverted)

また、文字列の任意の場所(先頭や末尾だけでなく)で数字以外の文字を削除したい場合は、次のようにします。 filtercharacters のように、例えばSwift 4.2.1では

let result = string.filter("0123456789.".contains)

また、文字列のどこからでもCharacterSetから文字を削除したい場合は、使用します。

let result = String(string.unicodeScalars.filter(CharacterSet.whitespaces.inverted.contains))

また、特定の形式の有効な文字列のみにマッチさせたい場合(例えば ####.## のように)、正規表現を使うことができます。例えば

if let range = string.range(of: #"\d+(\.\d*)?"#, options: .regularExpression) {
    let result = string[range] // or `String(string[range])` if you need `String`
}

これらの異なるアプローチの動作はわずかに異なるので、あなたが何をしようとしているのかによります。小数点を含むか含まないかは、小数点以下の数値が必要な場合、あるいは単なる整数が必要な場合です。これを実現する方法はたくさんあります。


古い、Swift 2 の構文については この回答の前のリビジョン .