Menu
Coddy logo textTech

部分文字列の置換

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 5/56。

replacingOccurrences(of:with:) は、ある部分文字列に一致するすべての箇所を別の文字列で置き換えた、新しい文字列を返します:

let phone = "555-123-4567"
let digits = phone.replacingOccurrences(of: "-", with: "")
print(digits)              // "5551234567"

ケースメソッドと同様に、新しい String を返します。元の文字列は変更されません。複数のパターンを削除する必要がある場合は、メソッドをチェーンして呼び出します:

let messy = "  555-123 4567  "
let clean = messy
    .replacingOccurrences(of: "-", with: "")
    .replacingOccurrences(of: " ", with: "")
print(clean)               // "5551234567"

2回の置換を行うということは、文字列を2回走査することを意味します。巨大な文字列を扱うパフォーマンスが重要なコードでは、文字に対して filter を1回だけ実行する方が適しています。日常的な用途であれば、置換をチェーン(連結)させても問題ありませんし、コードも明快になります。

challenge icon

チャレンジ

初心者

入力を1行読み込みます。それを文章として扱い、以下の手順でURLに適したスラッグを作成してください:

  1. 入力を小文字にする
  2. すべてのスペースを - に置き換える
  3. すべての !?. 文字を削除する

結果のスラッグを出力してください。

入力が Hello World! の場合、出力は hello-world になります。Is Swift Fun? の場合、出力は is-swift-fun になります。

チートシート

replacingOccurrences(of:with:) は、一致するすべての箇所を置換した新しい文字列を返します:

let digits = "555-123-4567".replacingOccurrences(of: "-", with: "")
// "5551234567"

複数のパターンを処理するために、呼び出しをチェーンさせます:

let clean = "555-123 4567"
    .replacingOccurrences(of: "-", with: "")
    .replacingOccurrences(of: " ", with: "")

自分で試してみよう

let line = readLine()!

// TODO: 小文字にする、スペースをハイフンに置き換える、! ? . の文字を削除する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン