Swift

【Swift】文字列の扱い方一覧まとめ|配列や計算

記事内に商品プロモーションを含む場合があります

この記事の目的

言語によって扱い方が異なる文字列.
この記事ではSwiftにおける文字列の扱い方を,まとめて紹介します!

開発にはもちろん,コーディングテストにも役立つ文字列の使い方になります.
Swiftでは文字列をどのように使用するのかわからなくなった際に,見に来てくれると嬉しいです!

Swiftにおける文字列の基礎

文字列の計算|足し算

Swiftでは文字列同士を足し算を用いてつなげることができます

let str1 = "Hello"
let str2 = "World"

let meargedStr = str1 + str2
print(meargedStr)
    
// 出力 = HelloWorld
Swift

ちなみにこの文字列の足し算を用いることで,
最大の共通部分文字列(つまり,str2 = str1+ str1 + … + str1)
を含むか否かを判定することができます.

guard (str1 + str2) == (str2 + str1) else { return "" }

// 共通部分文字列が存在する場合の処理
Swift

Swiftにおける文字列の扱い方

文字列を配列のように扱うには?

Swiftの文字列を配列のように,indexを用いて文字を抽出・使用したいこともあると思います.
しかし,単純にword[2]のようには使用できません.
その場合には,word.indexのようにindexを一度得ることで,特定の文字を抽出することができます

以下のコードは,word.indexを使用した2つのwordを交互につなぐことができるプログラム例になります.
(zipを用いた方法など,処理速度がもっと早いアルゴリズムが存在します)

let word1 = "ACE"
let word2 = "BD"

var merged_string = ""
    for i in 0..<max(word1.count, word2.count) {
        if i < word1.count{
            if let word1_index = word1.index(word1.startIndex, offsetBy: i, limitedBy: word1.endIndex) {
                merged_string.append(word1[word1_index])
            }
        }
        if i < word2.count{
            if let word2_index = word2.index(word2.startIndex, offsetBy: i, limitedBy: word2.endIndex) {
                merged_string.append(word2[word2_index])
            }
        }
    }
    return merged_string

// 出力 = ABCDE
Swift

ちなみに,if let を用いて安全にアンラップを行っています.

しかし,上記コードではコードが冗長で読みづらいですよね..
そこで,ダイレクトな方法として,文字列を配列に変換することで,配列として扱うことも可能です.

// 1. StringをCharacterの配列に変換する
let word = "Hello"
let characterArray = Array(word)

print(characterArray) // 出力: ["H", "e", "l", "l", "o"]
Swift
// 2. 特定の区切り文字で文字列を分割して配列を作成する
let sentence = "Swift,Python,Java"
let languagesArray = Array(sentence.split(separator: ","))

print(languagesArray) // 出力: ["Swift", "Python", "Java"]
Swift
// 3. 空白やその他の文字で分割する
let text = "This is a test"
let wordsArray = text.split(separator: " ")

print(wordsArray) // 出力: ["This", "is", "a", "test"]
Swift

おわりに

このブログでは,SwiftやFlutterなどの日々学びつつアウトプットしています.
また,間違いや改善点があれば,ご指摘いただけますと幸いです!