こんにちはしまーです。今回は、実際に実務で多様している文字列操作(最新版)をまとめてみました。

作業効率アップにつながればと思いますので一度よんでみることをお勧めします。

Swift Stringは、Unicodeに対応しており、多数のメソッドとプロパティを提供しているため文字列操作が非常に便利です。

 

目次

 

 

宣言

Swiftでは、Stringはダブルクォーテーションで囲まれた文字列リテラルで宣言されます。リテラルとはソースコード内に直接かかれた文字とか数字を指す。

let greeting: String = "Hello, world!"

 

確認環境

Swift 5.7.2

Xcode 14.2

 

操作

Swift Stringは、文字列を操作するための多数のメソッドとプロパティを提供しています。

以下はいくつかの例になります。

文字列の長さ

let str = "Count"
print(str.count)  // 5

 

文字列の結合

let firstName = "ichirou"
let lastName = "Shimmer"
let fullName = firstName + " " + lastName
print(fullName) // "ichirou Shimmer"

 

文字列の追加

var name = "ichirou"

name.append(" Shimmer")
print(name) // ichirou Shimmer

 

文字列の比較

case1.

let str = "帽子"
let hat = "帽子"
let grove = "手袋"

if str == hat {
  print("同じ")
} else {
  print("違う")
}
// 同じ

if str == grove {
  print("同じ")
} else {
  print("違う")
}
// 違う

 

case2

enum MotionState: String{
  case front
  case back
  case right
  case left
}
let nowState = "front"
if nowState == MotionState.front.rawValue {
  print("nowStateは前進")     // nowStateは前進
} else if nowState == MotionState.back.rawValue {
  print("nowStateは後退")
}

 

先頭文字列を比較

let str = "しまーぶろぐ"

print(str.hasPrefix("しまー")) // true
print(str.hasPrefix("まー")) // false

 

語尾文字列を比較

let message = "The password must be at least 8 characters long"
let hasPassword = message.contains("password")
print(hasPassword)  // true
print(message.contains("This"))  // false

 

文字列の検索

 

指定文字列検索

let message = "The password must be at least 8 characters long"
let hasPassword = message.contains("password")
print(hasPassword)  // true
print(messsage.contains("This"))  // false

 

先頭から指定文字の位置を取得

let str = "隣の客はよく柿食う客だ"
if let index = str.firstIndex(of: "客")?.utf16Offset(in: str){
	print(index)  // 2
}

 

語尾から特定文字の位置を取得

let str = "隣の客はよく柿食う客だ"
if let index = str.lastIndex(of: "客")?.utf16Offset(in: str){
	print(index)  // 9
}

 

分割

 

文字列を文字に分割

let str = "さらだでげんき"
let charArray = Array(str)

print(charArray) // ["さ","ら","だ","で","げ","ん","き"]

文字列を特定の文字区切りで分割

 

case 1 カンマ(,)で分割
let str = "さらだ,で,げんき"
let array = str.split(separator: ",")
print(charArray) // ["さらだ","で","げんき"]

 

case 2 空白(スペース)で分割
let sentence = "The quick brown fox jumps over the lazy dog"
let words = sentence.split(separator: " ")
print(words) // ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]

 

case 3 空白(スペース)で分割2
// 空白(スペース)で分割
let str = "さらだ で げんき"

var array = str.components(separatedBy: CharacterSet(charactersIn: " "))
print(array) // ["さらだ", "で", "げんき"]

array = str.components(separatedBy: " ")
print(array) // ["さらだ", "で", "げんき"]

 

文字列を特定の文字列区切りで分割
static public func check17() {
    let str = "さらだ,で,げんき"
    let array = str.split(separator: ",で,")
    print(array)  // ["さらだ", "げんき"]
  }

 

変換

 

IntからStringへの変換

let num = 10

print("case1 : " + String(num))      // case1 : 10
print("case2 : " + num.description)  // case2 : 10

 

StringからInt型への変換

let str = "10"
let num = Int(str)!
print(num)  // 10

 

置換

 

英語大文字から小文字

let str = "FIGHT!!花子"

print(str.lowercased())  // fight!!花子

 

英語小文字から大文字

let str = "fight!!太郎"

print(str.uppercased())  // FIGHT!!太郎

 

ひらがな→カタカナ

let str = "ひらがな"
let result = str .applyingTransform(.hiraganaToKatakana,revers: false)!
print(result)  //  ヒラガナ

 

カタカナ→ひらがな

let str = "カタカナー"
let result = str.applyingTransform(.hiraganaToKatakana,revers: true)!
print(result)  //  かたかなあ
注意)調音符号もヒラガナに変わる

 

指定文字列を置換

let str = "にんじん”
let changeStr= str.replacingOccurrences(of: "じ", with: "げ")
print(changeStr) // にんげん

 

切取り(部分取得・部分削除)

 

指定文字列以外を取得/指定文字列を削除

let str = "さらだでげんき”
let changeStr = str.replacingOccurrences(of:"で",with:"")
print(changeStr) // さらだげんき

 

前後の空白(スペース)と改行文字削除 / 前後の空白(スペース)と改行文字以外を取得


//  前後の空白(スペース)を削除
var str = " さらだでげんき "
var changeStr = str.trimmingCharacters(in: .whitespaces)
print(changeStr)  // さらだでげんき
    
str = "\n\nさらだでげんき\n\n"
changeStr = str.trimmingCharacters(in: .newlines)
print(changeStr)  // さらだでげんき

str = " \n\nさらだでげんき\n\n "
changeStr = str.trimmingCharacters(in: .whitespacesAndNewlines)
print(changeStr)  // さらだでげんき

 

先頭からn番目までの文字列取得/先頭からn番目以降の文字を削除

let str = "しまーぶろぐ"

print(str.prefix(1))  // し

 

語尾からn番目の文字以前を削除 / 語尾からn文字を取得

let str = "しまーぶろぐ"

print(str.suffix(1))  // ぐ

 

先頭からn番目の文字まで削除 / 先頭からn番目以降の文字列を取得

case1
let str = "しまーぶろぐ"
print(str.suffix(str.count - 2))  // ーぶろぐ

 

case 2
var str = "しまーぶろぐ"
let index = 3
    
str.removeFirst(index)
print(str) // ぶろぐ

 

case3
let str = "しまーぶろぐ"
print(str.dropFirst(2))  // ーぶろぐ
print(str.dropFirst(3))  // ぶろぐ

 

語尾からn番目の文字まで削除 / 語尾からn番目より前の文字列を取得

 

case1
let str = "しまーぶろぐ"

print(str.prefix(str.count - 2))  // しまーぶ

 
case2
let str = "しまーぶろぐ"
print(str.dropLast(2))  // しまーぶ
print(str.dropLast(3))  // しまー

 

m番目からn番目以外の文字削除 / m番目からn番目の文字列を取出し

// 文字列の1~2文字目を取得
let str = "しまーぶろぐ”
let changeStr = String(str.map{$0}[1...2])
print(changeStr)  // まー

 

文字列補間

 

ゼロパディング(Zero Padding)

 

整数部の先頭を0埋め
let num = 123
let str = String(format: "%05d", num)
print(str)  // 00123

 

小数点以下の語尾を0埋め
let num = 123.1
let str = String(format: "%0.5f", num)
print(str)  // 123.10000

 

改行

let str = "・第一章\n 其の壱"
print(str)
/*
 ・第一章
  其の壱
*/

 

Range操作

 

Rangeで指定した文字を取得

var sentence= "南極にホッキョクグマは居る?"
if let range = sentence.range(of: "ホッキョク") {
  print(sentence[range])  //  ホッキョク
}

 

Rangeで指定した文字を削除

var sentence= "南極にホッキョクグマは居る?"
if let range = sentence.range(of: "ホッキョク") {
  sentence.removeSubrange(range)
  print(sentece)  //  南極にグマは居る?
}

 

Rangeで指定した文字を置換

var sentence= "南極にホッキョクグマは居る?"
if let range = sentence.range(of: "ホッキョク") {
  sentence.replaceSubrange(range, with:"ナンキョク")
  print(sentece)  //  南極にナンキョクグマは居る?
}

 

文字配列操作

 

文字列抽出

// 指定文字数の文字列を配列より抽出
let fruits = [ "リンゴ", "桃", "パイナップル" , "いちご", "メロン"]
let threeString = fluets.filter{ $0.count == 3 }
print(threeStrng) // ["リンゴ", "いちご", "メロン"]

 

最初に条件一致

let fruits = [ "リンゴ", "桃", "パイナップル" , "いちご", "メロン"]
let firstThreeString = fruits.first{ $0.count == 3 }!
print(firstThreeString)  // リンゴ

最後に

最後までお読みいただきありがとうございました。

今後も気になる構文を紹介していきたいと思いますので是非よろしくお願いいたします。ご意見などありましたらメッセージ頂けますと幸いです。

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    CAPTCHA