文字列

文字操作はプログラミングの基本です。SwiftにはStringという文字列用のクラスがあります。ここではStringの使い方や命令について解説します。

StringとCharacterの宣言

Swiftとで文字列を使うときはString、文字を使うときはCharacterを使います。宣言の仕方は以下の通りです。

String,Character

var 変数名: String =”文字列”

var 変数名: Character=”A”

「:String」を除いても大丈夫ですが、「:Charater」は必要です。もし「:Character」がないとStringだと判断します。

空のStringと文字の繰り返し

空のStringを作るには

空のString

var a=””

var a=String()

とします。同じ文字の繰り返しにしたい場合は

var a=String(repeating:”A”, count:5)

とします。するとaはAAAAAとなります。

特殊文字

Stringには特殊文字があります。なぜ特殊文字が必要かというとコンパイラがコンパイルする際に特殊文字を使用するからです。例えば、

var a=”””

とすればaには「”」が入りそうですが、コンパイラが識別できないのでエラーになります。この場合は

var a=”\””

とします。するとコンパイラが「\”」を「”」と判断して、aには「”」が代入されます。以下に特殊文字一覧を表示します。

特殊文字 内容
\0 ヌル
\\ バックスラッシュ
\t タブ
\n 改行
\r キャリッジリターン
\” ダブルクォーテーション
\’ シングルクォーテーション
\xnn ユニコード(1バイト)
\unnnn ユニコード(2バイト)
\Unnnnnnnn ユニコード(4バイト)

Stringにおける様々な操作

ではStringで使用できる様々な命令について紹介します。

数値や式を含める

文字列に数値や式を簡単に含めることができます。例えば

var a=1
var b=2
var s="a=\(a),b=\(b)\na+b=\(a+b)"
print(s)

とすると

a=1,b=2

a+b=3

が表示されます。

Stringの結合

Stringどうしの結合は

var a="AB"
var b="CD"
var c=a+b
print(c)

のようにただ「+」でつなぐだけです。

ABCD

Stringの数値変換

StringをIntへ変換する際は

var a="2"
var b:Int?=Int(a)

とInt()を使用します。Int()は「Int?」を返します。ここででてくる「?」はOptionalです。「?」がついていると「nil」の可能性があることを意味します。つまり、Int?は「Int型だけど値はない(nil)かも?」という意味です。例えば、

var a="a"
var b:Int?=Int(a)

とするとbはnilになります。文字は数値に変換できないからです。もし、nilかどうかをチェックして命令を変えたい場合は

var a="3"
var b:Int
if let b = Int(a){
    print(b)
}else{
    print("Error")
}

としましょう。すると

3

となります。let b=Int(a)でnilがかえるとfalseになり、print(“Error”)が実行されます。

さて、次に実数に変換する方法を紹介します。実数の場合は

var a = "3"
var b = Float(a)

とします。

文字列から1文字ずつ順に読む

文字列から1文字ずつ読むにはfor文を使用します。

var a="ABCD"
for c in a.characters{
    print(c)
}

とすると

A
B
C
D

となります。ここで変数cはCharacter型です。

文字を末尾に追加する

文字を末尾に追加するにはappendを使用します。

var a="AB"
var b:Character="C"
a.append(b)

この結果、aは「ABC」となります。

先頭や末尾の文字列をチェックする

文字列の先頭や末尾にある文字列が含まれているかどうかチェックするにはhasPrefixとhasSuffixを使います。

var a="ABCDEFG"
if a.hasPrefix("AB"){
    print("先頭はAB")
}else{
    print("先頭はABでない")
}

if a.hasSuffix("FG"){
    print("末尾はFG")
}else{
    print("末尾はFGでない")
}

とすれば

先頭はAB
末尾はFG

となります。

文字列の大きさをしる

文字列の大きさを知るにはcharacters.countを使用します。

var a="ABCDEFG"
var b:Int=a.characters.count
print(b)

ならば

7

となります。

特定の文字列の位置をしる

文字列中のある文字列の場所を知りたい場合はrangeOfStringを使用します。例えば

var a="ABCDEFGHCDAAAA"
var moji="CD"
var range:Range? = a.rangeOfString(moji)
if range != nil{
    var b:String.Index=range!.startIndex
    var c:String.Index=range!.endIndex
    println(a+"における"+moji+"は\(b)から\(c)")
}else{
    print("Error")
}

とすれば

ABCDEFGHCDAAAAにおけるCDは2から4

となります。はじめに出てくる文字列の場所を返します。

 指定番号の文字を取り出す

ある場所の文字を取得するにはadvanceを使います。例えば

var a="ABCDEFGH"
var b:Character=a[advance(a.startIndex,4)]
println(b)

とすれば

E

となります。範囲を指定して文字列を得るには

var a="ABCDEFGH"
var start=advance(a.startIndex,4)
var end=advance(a.startIndex,6)
var b=a[start..<end]
println(b)

のようにします。結果は

EF

となります。

著者:安井 真人(やすい まさと)