読み込み中...

Swiftで文字列を簡単に置換する!実践的な方法10選

Swiftのロゴと文字列置換のイラスト Swift
この記事は約17分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

あなたがWebサイトやアプリを開発している際、ユーザーからの入力を整形したり、テキストデータを変換する際に文字列の置換は避けては通れないステップとなります。

特にSwiftを使用してiOSアプリの開発を行っている方にとって、文字列の置換は日常的な作業と言えるでしょう。

しかし、置換の方法は一つではありません。

目的や状況に応じて、最も効率的な置換方法を選択することが重要です。

●Swiftにおける文字列置換の基本

Swiftでは、文字列はString型として扱われます。

このString型には、様々な文字列操作を行うためのメソッドが提供されています。

○文字列置換の意味とは?

文字列置換とは、文字列内の特定の部分を別の文字列に変更することを指します。

例えば、「こんにちは、世界」という文字列から「世界」を「Swift」と置換すると、「こんにちは、Swift」という新しい文字列が得られます。

○Swiftでの文字列の扱い方

Swiftで文字列を扱う基本は、String型の変数や定数を使用することです。

このコードでは、文字列を初期化して表示しています。

let originalString = "こんにちは、世界"
print(originalString) // 出力結果:こんにちは、世界

この例では、originalStringという定数に「こんにちは、世界」という文字列を代入し、その後print関数を使ってコンソールに出力しています。

●Swiftでの文字列置換の具体的な方法

Swiftでの文字列置換を行う際の具体的な方法を紹介していきます。

初心者でも理解しやすいように、具体的なサンプルコードとともに詳しく解説していきます。

○サンプルコード1:基本的な文字列置換の方法

まずは、Swiftでの文字列置換の基本的な方法を見ていきましょう。

このコードでは、replacingOccurrencesメソッドを使って文字列の置換を行っています。

var str = "こんにちは、世界"
str = str.replacingOccurrences(of: "世界", with: "Swift")
print(str) // こんにちは、Swift

この例では、”こんにちは、世界”の中の”世界”を”Swift”に置換しています。

結果として、”こんにちは、Swift”が出力されます。

○サンプルコード2:正規表現を使った文字列置換

正規表現を使うことで、より複雑な文字列のパターンにも対応した置換が可能となります。

このコードでは、正規表現を利用して数字だけを置換しています。

let pattern = "[0-9]+"
let regex = try! NSRegularExpression(pattern: pattern)
let targetString = "今日は2023年10月15日です。"
let replacedString = regex.stringByReplacingMatches(in: targetString, options: [], range: NSRange(location: 0, length: targetString.count), withTemplate: "X")
print(replacedString) // 今日はXXXX年XX月XX日です。

この例では、”今日は2023年10月15日です。”という文字列中の数字を全て”X”に置換しています。

結果として、”今日はXXXX年XX月XX日です。”が出力されます。

○サンプルコード3:大文字・小文字を区別しない文字列置換

Swiftには、大文字や小文字を区別せずに文字列の置換を行う方法も提供されています。これは、例えばユーザーからの入力などで、大文字小文字のバリエーションが予測しきれない場面にお

いて非常に役立ちます。

このコードでは、String.CompareOptions.caseInsensitiveオプションを使って、大文字・小文字を区別せずに文字列を置換しています。

let originalString = "Hello, SWIFT World!"
let replacedString = originalString.replacingOccurrences(of: "swift", with: "Apple", options: .caseInsensitive, range: nil)
print(replacedString)

このサンプルコードを実行すると、”Hello, SWIFT World!”という文字列の”SWIFT”を”Apple”に置換した結果、”Hello, Apple World!”が出力されます。

この方法を使えば、様々な文字列のパターンでも確実に目的の文字列を置換することができるため、多様なテキストデータの処理において高い効率が期待できます。

○サンプルコード4:部分的な文字列置換

時には、文字列の一部だけを置換したい場合もあるでしょう。

Swiftでは、rangeを指定することで部分的な文字列置換を行うことができます。

このコードでは、特定の範囲だけを対象として文字列の置換を行っています。

let baseString = "Swift is fun. Swift is powerful."
if let range = baseString.range(of: "Swift") {
    let partialReplacedString = baseString.replacingCharacters(in: range, with: "Python")
    print(partialReplacedString)
}

このサンプルコードを使うと、”Swift is fun. Swift is powerful.”の最初に出現する”Swift”のみを”Python”に置換した結果、”Python is fun. Swift is powerful.”が出力されます。

○サンプルコード5:繰り返し置換を行う方法

Swiftの文字列操作メソッドには、一度の操作で文字列内の特定の部分を複数回置換する機能が含まれています。

特に、同じ文字列やパターンが複数回現れるテキストを扱う際に、この機能は非常に役立ちます。

例として、文中の「Swift」を全て「Python」に置換するケースを考えます。

Swiftの文字列操作メソッドreplacingOccurrences(of:with:)を使用すると、指定した文字列を一度の操作で複数回置換することができます。

let originalText = "Swiftは素晴らしい言語です。Swiftは速度も速く、安全性も高いです。"
let replacedText = originalText.replacingOccurrences(of: "Swift", with: "Python")
print(replacedText)

このコードを実行すると、”Swiftは素晴らしい言語です。Swiftは速度も速く、安全性も高いです。”という元のテキストから、”Swift”という部分が”Python”に置換され、”Pythonは素晴らしい言語です。

Pythonは速度も速く、安全性も高いです。”という新しいテキストが出力されます。

このように、Swiftでは繰り返し置換を行う方法もシンプルかつ直感的です。

特定の文字列やパターンがテキスト内に複数回現れる場合に、一括で置換することができるので、テキストの加工や編集が効率的に行えます。

○サンプルコード6:特定のパターンを持つ文字列の置換

Swiftでの文字列置換は、正確な文字列だけでなく、特定のパターンを持つ文字列の置換も可能です。

例えば、文章内の電話番号やメールアドレスなどの特定のパターンを持つ文字列を探して置換するケースが考えられます。

このコードでは、正規表現を用いて、文章内のメールアドレスの形式を持つ文字列を探し出し、それを「[メールアドレス]」という文字列に置換しています。

import Foundation

let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let textWithMail = "お問い合わせはexample@example.comまで。"
let modifiedText = regex.stringByReplacingMatches(in: textWithMail, options: [], range: NSRange(location: 0, length: textWithMail.count), withTemplate: "[メールアドレス]")
print(modifiedText)

このサンプルコードの詳細な説明は次の通りです。まず、メールアドレスの形式に合致する正規表現をpatternとして定義しています。

次に、この正規表現を用いて、指定したテキスト内のメールアドレス部分を「[メールアドレス]」に置換する操作を行っています。

このコードを実行すると、”お問い合わせはexample@example.comまで。”という元のテキストから、メールアドレス部分が”[メールアドレス]”に置換され、”お問い合わせは[メールアドレス]まで。”という新しいテキストが出力されます。

●Swiftにおける文字列置換の応用例

Swiftの文字列置換の機能は、基本的な文字列の置換だけでなく、様々な応用が可能です。

実際のアプリ開発やテキストの加工作業でよく遭遇するシチュエーションにおいて、Swiftの置換メソッドをどのように利用するか、具体的なサンプルコードと共に紹介します。

○サンプルコード7:日付のフォーマットを変更する置換

テキスト中に含まれる日付のフォーマットを変更することは、ログの解析やレポートの生成などで必要になることがあります。

ここでは、”yyyy/MM/dd”の形式を”dd-MM-yyyy”の形式に変更するサンプルコードを紹介します。

let originalDate = "2023/10/15"
let dateComponents = originalDate.split(separator: "/").reversed()
let formattedDate = dateComponents.joined(separator: "-")
print(formattedDate)  // "15-10-2023"

このコードでは、まずsplit(separator:)メソッドで日付を”/”で区切り、年、月、日の順の配列を取得しています。

その後、reversed()メソッドで順序を逆にし、joined(separator:)メソッドを使って”-“で結合することで新しい日付の形式を得ています。

○サンプルコード8:URLの一部を置換してリダイレクト

ウェブページやアプリ内でURLを動的に生成してリダイレクトすることはよくあります。

例えば、特定のユーザーIDや商品IDを含むURLを生成する場合、Swiftの文字列置換機能を利用すると簡単に実現できます。

let baseURL = "https://example.com/user/{userID}/profile"
let userID = "12345"
let finalURL = baseURL.replacingOccurrences(of: "{userID}", with: userID)
print(finalURL)  // "https://example.com/user/12345/profile"

上記のコードでは、replacingOccurrences(of:with:)メソッドを使用して、baseURL中の”{userID}”という部分を具体的なユーザーIDである”12345″に置換しています。

○サンプルコード9:文字列中の数値だけを取り出して置換

時折、文字列中に埋め込まれている数字だけを取り出して操作する必要があるかと思います。

例えば、あるテキストに「今年の売上は50万円、去年は40万円」といった形で記載されているとき、その数字だけを取り出して比較や計算を行う場面は多々あるでしょう。

Swiftではこのような操作も簡単に実現できます。

具体的なサンプルコードとともに、手法を説明します。

let text = "今年の売上は50万円、去年は40万円"
let numberPattern = "\\d+"
if let regex = try? NSRegularExpression(pattern: numberPattern) {
    let matches = regex.matches(in: text, options: [], range: NSRange(text.startIndex..., in: text))
    let numbers = matches.compactMap { 
        Int((text as NSString).substring(with: $0.range))
    }
    print(numbers)  // [50, 40]
}

このコードでは、NSRegularExpressionを使って、文字列から数字の部分だけを取り出しています。正規表現\\d+は、1桁以上の数字を意味しています。

この正規表現に合致する部分を全てmatchesに格納し、Intに変換して、最終的な数字の配列を取得します。

取得した数字を用いて、例えば売上の増減や成長率などの計算を行うことができます。

○サンプルコード10:異なるデータ型の置換

Swiftで文字列を置換する際、置換対象や置換後の文字列が必ずしもString型である必要はありません。

例えば、特定の文字列を数値や他のデータ型に置換するケースも考えられます。

ここでは、String型の文字列をInt型の数値に置換する方法を紹介します。

let originalText = "price: value"
if let range = originalText.range(of: "value") {
    let replacedText = originalText.replacingCharacters(in: range, with: String(100))
    print(replacedText)  // "price: 100"
}

このコードでは、range(of:)メソッドを使って置換対象の文字列の範囲を取得し、replacingCharacters(in:with:)メソッドでその範囲の文字列を指定した文字列に置換しています。

String(100)は、Int型の100をString型に変換しています。

●文字列置換時の注意点と対処法

Swiftを使用した文字列置換は非常に便利であるが、その中でもいくつかの注意点とそれに対する対処法が存在します。

ここでは、文字列置換をスムーズに行うための注意点とその解決策を詳しく解説します。

○置換の際のエスケープシーケンスに関する注意

Swiftの文字列内では、特定の文字列がエスケープシーケンスとして解釈されることがあります。

例えば、\tはタブ、\nは改行として扱われます。

これらの文字列を置換する際には注意が必要です。

let sampleText = "Hello\\nWorld"
let replacedText = sampleText.replacingOccurrences(of: "\\\\n", with: "\n")
print(replacedText)
// 出力は以下のようになります。
// Hello
// World

このコードでは、\\\\nを使ってエスケープシーケンスを表現して、実際の改行に置換しています。

\\\\はエスケープされた\を意味し、\\nとして文字列中の\\nを正確に指定しています。

○正規表現を使う場合の注意点

正規表現を用いた文字列の置換は強力なツールですが、正しく使わないと意図しない結果になることがあります。

特に正規表現の特殊文字を正確に理解して使用しないと、思わぬバグの原因になることが考えられます。

let inputText = "1.23 [4.56] (7.89)"
let pattern = "\\d+\\.\\d+"
if let regex = try? NSRegularExpression(pattern: pattern) {
    let result = regex.stringByReplacingMatches(in: inputText, options: [], range: NSRange(0..<inputText.utf16.count), withTemplate: "0.00")
    print(result)
    // 出力は「0.00 [0.00] (0.00)」となります。
}

このコードでは、数字とピリオドを含む部分を「0.00」という文字列に置換しています。

正規表現の中では.()などの特殊文字を使用する際は、\\でエスケープすることが必要です。

○置換結果が意図しないものになる場合の対処法

文字列の置換を行った結果、意図しない出力が得られることがあります。

そのような場合、置換前の文字列や正規表現、置換対象の文字列などを再確認することが重要です。

let demoText = "apple, orange, apple, banana"
let modifiedText = demoText.replacingOccurrences(of: "apple", with: "grape")
print(modifiedText)
// 出力は「grape, orange, grape, banana」となります。

このコードでは、全ての”apple”を”grape”に置換しています。

しかし、もし一部の”apple”だけを置換したい場合や、大文字小文字を区別して置換したい場合など、置換の条件を厳密に設定することで意図した結果を得られます。

●文字列置換のカスタマイズ方法

Swiftにおける文字列の置換は基本的なものから高度なものまでさまざまな方法があります。

ここでは、よりカスタマイズされた置換方法について取り上げます。

○置換のパターンを自由に設定する方法

Swiftでは、正規表現を利用することで、置換のパターンを細かく設定することが可能です。

特定の文字列やパターンを見つけて、それを別の文字列に置換する際に非常に役立ちます。

例として、文字列中の電話番号を検出して、それを伏字にする場合を考えてみましょう。

let text = "お問い合わせは012-3456-7890まで。"
if let regex = try? NSRegularExpression(pattern: "\\d{2,4}-\\d{2,4}-\\d{2,4}") {
    let modifiedText = regex.stringByReplacingMatches(in: text, options: [], range: NSRange(0..<text.utf16.count), withTemplate: "****-****-****")
    print(modifiedText)
    // 出力は「お問い合わせは****-****-****まで。」となります。
}

このコードでは、\\d{2,4}-\\d{2,4}-\\d{2,4}という正規表現を使って電話番号のパターンを検出し、それを****-****-****に置換しています。

○外部ライブラリを使った高度な文字列置換

Swiftのコミュニティでは多くの外部ライブラリが提供されており、文字列の置換に関しても便利なライブラリが存在します。

こうしたライブラリを利用することで、さらに高度な置換処理が実現できる場合があります。

例えば、SwiftStringというライブラリを使用すると、様々な文字列操作を簡単に実行できます。

import SwiftString

let originalText = "Swiftは素晴らしい。"
let replacedText = originalText.replace("素晴らしい", with: "楽しい")
print(replacedText)
// 出力は「Swiftは楽しい。」となります。

SwiftStringライブラリを使用すると、.replaceメソッドで簡単に文字列の置換を行うことができます。

また、このライブラリには他にも様々な文字列操作のメソッドが用意されており、日常の開発を大いに助けてくれるでしょう。

まとめ

Swiftでの文字列の置換は、非常に柔軟で多彩な方法が提供されています。

基本的な置換から正規表現を活用した高度な置換、さらには外部ライブラリを用いての効率的な操作まで、多岐にわたるテクニックが存在します。

初心者の方から経験豊富な開発者まで、置換の方法を知っておくことは、日常の開発作業をスムーズに進めるための大きな助けとなります。

特に、正規表現を駆使することで、複雑な文字列操作も簡潔に、そして効率よく行うことが可能になります。

また、外部ライブラリを利用することで、標準の機能だけでは難しい処理や、より高度な文字列操作を手軽に実現することができます。

Swiftのコミュニティは活発で、多くの便利なライブラリが日々公開されています。

これらのツールを活用することで、コーディングの幅も一段と広がることでしょう。

Swiftでの文字列操作、特に置換に関する知識は、アプリケーション開発の中核をなす部分です。

この記事を通じて、その基本から応用までの幅広い知識を身につけることができたことを願っています。