Help us understand the problem. What is going on with this article?

Swift4 での文字列操作

More than 1 year has passed since last update.

環境

macOS High Sierra 10.13.3
Xcode 9.2(9C40b)
Swift 4.0.3

文字列のカウント

文字列をカウントするにはcountプロパティを使用します。
変数に入っている文字列をカウントするには以下のように記述します。

stringCount.swift
let moji = "あいうえお"
let cnt = moji.count    // 5

ダブルクオーテーションで囲まれた文字列の後に.countを付けてもカウントが可能です。

let cnt = "あいうえお".count

英大文字、小文字変換

英大文字を小文字に変換するには.lowercased()メソッドを
英小文字を大文字に変換するには.uppercased()メソッドを使用します。

lowerUpperConvert.swift
let lowerString = "ABCDEFG".lowercased()    // abcdefgに変換される
let upperString = "abcdefg".uppercased()    // ABCDEFGに変換される

ひらがな、カタカナ変換

ひらがなをカタカナに、カタカナをひらがなに変換する場合はapplyingTransformメソッドを使用します。第1引数には「.hiraganaToKatakana」を指定し、カタカナに変換する場合は第2引数のreverseにfalseを、ひらがなに変換する場合はreverseにtrueを指定します。

kanaHenkan.swift
// あいうえお→アイウエオに変換
var hiragana = "あいうえお".applyingTransform(.hiraganaToKatakana, reverse: false)

// アイウエオ→あいうえおに変換
var katakana = "アイウエオ".applyingTransform(.hiraganaToKatakana, reverse: true)

半角英数小文字、全角英数大文字変換

半角英数小文字を全角英数大文字に、全角英数大文字を半角英数小文字に変換する場合はapplyingTransformメソッドを使用します。第1引数には「.fullwidthToHalfwidth」を指定し、全角英数大文字に変換する場合は第2引数のreverseにtrueを、半角英数小文字に変換する場合はreverseにfalseを指定します。

alphabetHenkan.swift
// ABCDE→ABCDEに変換
let zenkaku = "ABCDE".applyingTransform(.fullwidthToHalfwidth, reverse: true)
// ABCDE→ABCDEに変換
let hankaku = "ABCDE".applyingTransform(.fullwidthToHalfwidth, reverse: false)

部分文字列を取得する

先頭n文字、末尾n文字の取得

先頭のn文字取得するにはprefixメソッドを、末尾からn文字取得するにはsuffixメソッドを使用します。引数には取得する文字数を指定します。

prefixSuffix.swift
let moji = "ABCDEFG"
let prefixMoji = moji.prefix(3) // 先頭3文字の「ABC」
let suffixMoji = moji.suffix(2) // 末尾2文字の「FG」

指定した位置の文字列を取得する

指定した位置の文字列を取得するには[]と範囲演算子を使用します。例えば2文字目から6文字目までの5文字を取得したい場合は以下のようにします。

prefixSuffix.swift
let moji = "ABCDEFG"
let partString = moji[moji.index(moji.startIndex, offsetBy: 1)..<moji.index(moji.startIndex, offsetBy: 6)]  // BCDEF

文字列を数値に変換する

文字列から数値に変換するにはIntやDoubleを使用します。数値に変換できない場合はnilになります。

sujiHenkan.swift
let moji1 = "12"
let suji1 = Int(moji1)  // 12
//let suji1 = Int("あいう") // Intに変換できないのでnilになる

let moji2 = "12.3"
let suji2 = Double(moji2)  // 12.3
//let suji3 = Int(moji2)   // Intに変換できないのでnilになる

任意の文字列を検索する

任意の文字列が含まれているかを調べるにはrangeメソッドを使用します。引数に検索したい文字列を指定すると、その文字が含まれている範囲を返します。

searchString.swift
let sentence = "This is a ballpen."
// 文字列が見つかった場合はrangeに範囲が代入される
if let range = sentence.range(of: "ball") {
    print("\(sentence[range])が見つかりました。")
} else {
    print("文字列は見つかりませんでした。")
}

文字列を分割する

文字列を分割するには、componentsメソッドを使用します。引数には分割に使用する文字列を指定します。.newlineのような指定も可能です。

sprit.swift
let moji1 = "ABC,DEF,GHI"
let array1 = moji1.components(separatedBy: ",")  // ,で分割する

let moji2 = "ABC;DEF;GHI"
let array2 = moji1.components(separatedBy: ";")  // ;で分割する

let moji3 = "ABC\nDEF\nGHI"
let array3 = moji2.components(separatedBy: .newlines)   // 改行コードで分割する

文字列の置換

文字列を置換するには replaceSubrangeメソッドを使用します。第1引数に置換する範囲を、第2引数に置換後の文字列を指定します。

replaceString1.swift
var moji = "赤い花"
if let range = moji.range(of: "赤い") {
    moji.replaceSubrange(range, with: "青い")
    print(moji)     // 青い花
}

先ほどのreplaceSubrangeメソッドは変数の中の文字列を直接書き換えるものです。置換後も元の文字列を保持しておきたい場合はreplacingCharctersメソッドを使用します。

replaceString2.swift
if let range = moji.range(of: "赤い") {
    let repStr = moji.replacingCharacters(in: range, with:  "青い")
    print(moji)     // 赤い花
    print(repStr)   // 青い花
}

基数変換

10進数を2進数や16進数に変換したり、2進数や16進数を10進数に変換するにはIntやStringを使用します。

radixConv.swift
String(15, radix: 2)    // 10進数の15を2進数「1111」に変換
String(15, radix: 8)    // 10進数の15を8進数「17」に変換
String(15, radix: 16)   // 10進数の15を16進数「f」に変換

Int("1111", radix: 2)   // 2進数「1111」を10進数に変換
Int("17", radix: 8)     // 8進数「17」を10進数に変換
Int("f", radix: 16)     // 16進数「f」を10進数に変換

0埋めする

0埋めした数値を作成したい場合は、Stringでformat指定をします。

zeroPadding.swift
let num1 = String(format: "%04d",5)         // 0005
let num2 = String(format: "%0.3f", 0.1)     // 0.100
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした