11
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Swiftはじめたい...その8 文字列操作関数など

今回は文字列操作などの関数を試してみます。

まずは文字の切り取りから

substringです

  • substringはimport Foundationが必要でした。
substring
let s = "abcdefghijklmn"
// 先頭から5文字目まで
print(s.substringToIndex(s.startIndex.advancedBy(5)))
// 4文字目から最後まで
print(s.substringFromIndex(s.startIndex.advancedBy(5)))
// 3文字目から5文字目まで3文字
print(s.substringWithRange(Range<String.Index>(start: s.startIndex.advancedBy(2), end: s.startIndex.advancedBy(5))));
// 後ろから3文字
print(s.substringFromIndex(s.endIndex.advancedBy(-3)))
結果
abcde
fghijklmn
cde
lmn
  • なんじゃこりゃぁ〜〜〜〜〜?!バカにしてんのか??

substring:日本語も試してみます。

substring
import Foundation

let s = "日本語はABCちゃんとつかえるかな"
// 先頭から5文字目まで
print(s.substringToIndex(s.startIndex.advancedBy(5)))
// 4文字目から最後まで
print(s.substringFromIndex(s.startIndex.advancedBy(5)))
// 3文字目から5文字目まで3文字
print(s.substringWithRange(Range<String.Index>(start: s.startIndex.advancedBy(2), end: s.startIndex.advancedBy(5))));
// 後ろから3文字
print(s.substringFromIndex(s.endIndex.advancedBy(-3)))

結果
日本語はA
BCちゃんとつかえるかな
語はA
るかな
  • 日本語でも問題なさそうです。でも萎えました...他に方法ないのかな?

substring:こっちのほうがむしろすっきりするかも?

  • めんどいうのでもう配列で処理してみます。
array
let s = "日本語はABCちゃんとつかえるかな"
print([Character](s.characters)[2..<5].map{ String($0) }.joinWithSeparator(""))
結果
語はA
  • これでも一応答えはでました。

その他の文字関数 大文字小文字など

  • 小文字化、大文字化、文字列を含むかどうか?を試してみます。
文字関数いろいろ
let s = "abcXYZ日本語"
// 小文字
print("lowercaseString:",s.lowercaseString)
// 大文字
print("uppercaseString:",s.uppercaseString)
// 文字を含む
print("containsString:",s.containsString("ABC"))
// 合わせ技で文字を含むか?
print("upper->contains:",s.uppercaseString.containsString("ABC"))
// 日本語でで文字を含むか?
print("contains KANJI:",s.containsString("日本語"))
結果
lowercaseString: abcxyz日本語
uppercaseString: ABCXYZ日本語
containsString: false
upper->contains: true
contains KANJI: true
  • substringはがっくりでしたが、こっちはふつーです。
  • 基本的に日本語化どうかはもう関係ないみたいですね。

乱数

  • なんかObjective-cと一緒なんですね...
結果
for i in (0..<10) {
    print("[",i,"] = ",arc4random_uniform(UInt32(100)))
}
結果
[ 0 ] =  50
[ 1 ] =  49
[ 2 ] =  35
[ 3 ] =  91
[ 4 ] =  90
[ 5 ] =  47
[ 6 ] =  36
[ 7 ] =  8
[ 8 ] =  90
[ 9 ] =  25
  • 当たり前ですが実行するたびに値が変わります。

まとめ

  • substringはめんどくさいですねー
  • 正規表現まで試そうと思ってたんですがググるとNativeに扱えない感じ?なので放置
  • 時間関数はNSDateだってんでそれじゃSwiftじゃなくていいじゃん、なので後回し
  • perl好きとしては文字列操作が面倒だとイライラします。

今日はここまで

  • 次回は関数かな〜
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
11
Help us understand the problem. What are the problem?