Swiftで文字列の最後の文字を省いた文字列を作成する方法
こんにちは、@Yuuです。
果たしてこの記事需要あるのか・・?
今iPhoneアプリを開発してるのですが、そこで文字列の最後に付いてしまった余計な文字を削除するということをやりました。
こんなことを行う人が他にいるのか分からない・・分からないけど、
載せちゃいます!(・ω<)
スポンサーリンク
やりたいこと
例えばvar str : String = "abcde&"
という変数strがあったとします。
しかしこの変数にはまるで金魚のフンの如く"&"という文字が付いてしまっているので、この変数をstr = "abcde"
にしてやりたい!
ということです。
文字列の一番最後の文字を省いた文字列を作成する
文字列の最後の文字を省く方法をご紹介します。
使用する関数、substringToIndexの説明
今回の処理は
「変数strの先頭から"文字数-1"の文字列を取得し、変数strに代入する」
という事をすればOKです。
先程載せた図を例にするのであれば、6文字ある内の先頭5文字を取得すればいいということになります。
この処理をするためにsubstringToIndexという関数を使用します。
substringToIndexがどういう関数かというと、文字列から指定した範囲分の文字を抜き出す事が出来る関数です。
注意点としては、str.substringToIndex(5)
と引数にIntを指定するとコンパイルエラーになってしまうことです。
substringToIndexは引数がString.Indexなので、str.substringToIndex(str.startIndex)
みたいな指定方法をしないといけません。
もしくはNSString型のsubstringToIndexだと、引数にInt型が指定出来るので、String型からNSString型に変換するという方法があります。
むぅ、ややこしい・・(; ・`д・´)
実際の処理
前置きが長くなってしまいましたが、実際に処理を記述してみたいと思います。
2つほど記述方法を思い付いたので両方紹介します。
NSStringに変換する方法
1 2 3 |
var str : String = "abcde&" var endPoint = count(str) - 1 str = (str as NSString).substringToIndex(endPoint) |
NSString型のsubstringToIndexであれば、Intがそのまま使える事を利用した方法です。
まず、endPointという変数に取得するべき文字数を格納しています。
その後、変数strをNSString型に変換し、substringToIndexを用いて取得しています。
advanceを使用する方法
1 2 3 |
var str : String = "abcde&" var endPoint = count(str) - 1 str = str.substringToIndex(advance(str.startIndex, endPoint)) |
こちらは変数strをNSStringに変換しない方法。
ただ変換しないということは、引数にIntを指定することが出来ません。
そこで、substringToIndexの引数でadvanceを使用します。
advanceの使用方法はsubstringToIndex(advance("取得を開始する位置","開始位置から取得する文字数"))
と指定します。
1番目の引数"取得を開始する位置"にはString.Indexを指定しないといけませんが、
2番目の引数"開始位置から取得する文字数"部分にはIntを指定出来ます。
あとがき
Swiftは個人的に書きやすくて好きなんですが、型が難しく感じます。
今回も一番苦しめられたのString.Indexの部分でした。
「え?Int指定出来ないの?でもNSString型に変換したらIntを引数で使ってもいいの?なんで??」
やりながらずっとそんな感じでした。
いやぁ・・Swfitの型は良く分かんないです!w
でもとっても楽しいですけどね。
では、皆さんもiPhoneアプリ開発楽しんで下さい!ヽ(•̀ω•́ )ゝ✧