Swift 文字列 切り出し・部分文字列(Substring)の扱い方を初心者向けに解説
生徒
「Swiftで文字列の一部だけを取り出したいんですが、どうすればいいんですか?」
先生
「Swiftでは文字列を切り出す方法がいくつかあります。部分文字列(Substring)という仕組みを使って、効率よく取り出すこともできますよ。」
生徒
「Substringって何ですか?普通のStringとは違うんですか?」
先生
「良い質問ですね。SubstringはStringの一部分を表す型で、元の文字列を参照する特徴があります。それでは具体的に見てみましょう!」
1. Swiftの文字列を切り出す基本
文字列を切り出すとは、文章の中から必要な一部だけを取り出す操作です。例えば「Swift言語」という文字列から「Swift」や「言語」だけを抽出するイメージです。Swiftではprefixやsuffixを使う方法が直感的で初心者に向いています。
let text = "Swift言語"
let firstPart = text.prefix(5)
let lastPart = text.suffix(2)
print(firstPart)
print(lastPart)
Swift
言語
prefixは先頭から指定した文字数、suffixは末尾から指定した文字数を切り出します。
2. インデックスを使った部分文字列の取り出し
Swiftの文字列はインデックスという仕組みで管理されています。インデックスとは、文字の位置を示す番号のようなものです。ただし、Swiftでは単純な数字ではなく特別な型を使います。
let text = "プログラミング"
let startIndex = text.startIndex
let endIndex = text.index(startIndex, offsetBy: 4)
let sub = text[startIndex...endIndex]
print(sub)
プログラ
この例では先頭から5文字分を切り出しています。startIndexは文字列の最初を示し、offsetByで何文字先まで取るか指定しています。
3. Substring型とは?
Swiftで文字列を切り出すと、結果はSubstring型になることがあります。Substringは元の文字列を参照する仕組みを持ち、メモリの節約につながります。ただし長く保持すると元の文字列全体を記憶し続けるため注意が必要です。
let text = "Hello, Swift!"
let part = text.prefix(5)
print(type(of: part))
Substring
出力を見ると、切り出した結果はSubstringであることがわかります。
4. SubstringをStringに変換する
Substringをそのまま使うこともできますが、長期間保持したい場合や他の処理で使いたい場合はStringに変換するのが安全です。
let text = "Swift入門"
let sub = text.prefix(5)
let converted = String(sub)
print(converted)
Swift
String()でラップするだけで簡単に変換できます。これにより扱いやすくなります。
5. 特定の文字で分割して取り出す
文字列を特定の区切り文字で分割する方法もよく使います。Swiftではsplitメソッドを使って分割し、部分文字列を取り出せます。
let sentence = "リンゴ,バナナ,オレンジ"
let fruits = sentence.split(separator: ",")
for fruit in fruits {
print(fruit)
}
リンゴ
バナナ
オレンジ
この方法はCSV(カンマ区切りのデータ)などを扱うときに便利です。
6. 部分文字列の応用:検索と切り出し
文字列の中で特定の単語を探して、その前後を切り出すことも可能です。例えば「Swiftで学ぶプログラミング」という文章から「プログラミング」を探して、その部分だけを切り出す例です。
let text = "Swiftで学ぶプログラミング"
if let range = text.range(of: "プログラミング") {
let sub = text[range]
print(sub)
}
プログラミング
range(of:)を使うと文字列内での位置を見つけられます。その範囲を指定して切り出すことで、特定の単語を抽出できます。
7. SubstringとStringの使い分け
初心者が迷いやすいのがSubstringとStringの違いです。簡単にまとめると次のようになります。
- Substring … 元の文字列の一部を効率的に参照。短期間の利用に向いている。
- String … 独立した文字列データ。長期間保持や再利用に適している。
実際の開発では、処理の目的に応じて変換しながら使い分けることが重要です。