LoginSignup
7
7

More than 5 years have passed since last update.

文字列から任意の文字列を取得する

Posted at

文字列から任意の文字列を取得したい場合、以下のようなコードはシンタックスエラーとなります。

sample1.swift
let str = "world"
println(str.substringFromIndex(2)) // rld を期待

Intを直接指定することはできず、String.Indexを指定する必要があります。
String.Indexはadvance関数を使って作成します。

sample2.swift
let str = "world"
println(str.substringFromIndex(advance(str.startIndex, 2))) // rld

NSString型として取得することもできます。

sample3.swift
let str = "world"
println(NSString(string: str).substringFromIndex(2)) // rld

機能拡張(extension)として実装すると次のようになります。
substring1とsubstring2はともに同じ実行結果となります。

sample4.swift
extension String {
    func substring1(start: Int) -> String {
        return self.substringFromIndex(advance(self.startIndex, start))
    }

    func substring2(start: Int) -> String {
        return NSString(string: self).substringFromIndex(start)
    }
}

let str = "world"
println(str.substring1(2)) // rld
println(str.substring2(2)) // rld

文字列のstartで指定された位置からlength分の文字列を返す場合は次のようになります。

sample5.swift
extension String {
    func substring(start: Int) -> String {
        return self.substringFromIndex(advance(self.startIndex, start))
    }

    func substring(start: Int, length:Int) -> String {
        return self.substringFromIndex(advance(self.startIndex, start)).substringToIndex(advance(self.startIndex, length))
    }
}

let str = "world"
println(str.substring(2, length:2)) // rl
println("おはようせかい".substring(1, length: 3)) // はよう
7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7