Contents
はじめに
ここ、ちょっとした検証にめちゃくちゃ便利。
それはさておき
今回のミッション
$address = "154-00xx 東京都世田谷区〜"; $char_strlen = strlen("都"); // 3バイト文字でもいいように先頭からの位置を求めておく $result = substr($address, strpos($address, "都")+$char_strlen, strlen($address)); echo($result); // 「世田谷区〜」が返ってくる
こういうことをswiftでやりたいのですよ。
strpos($address, "都")
ハマって数時間、ここに辿り着けてないんです。
ここを見る限りでは
https://gootara.org/library/2017/09/swift4substr.html
// start - end ではなく長さで指定したい場合のサンプル let startIndex = text.index(text.startIndex, offsetBy: 2) // 開始位置 2 let endIndex = text.index(startIndex, offsetBy: 6) // 長さ 6 print(text[startIndex..<endIndex]) // -> "CDEFGH"
部分文字列で返ってくるので、phpとは考え方がまるで違うやつか
ん?
let text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" print(text[..<text.index(text.startIndex, offsetBy: 6)]) // -> "ABCDEF" 先頭から指定インデックスまで print(text[text.index(text.startIndex, offsetBy: 20)...]) // -> "UVWXYZ" 指定インデックスから終端まで print(text[text.index(text.endIndex, offsetBy: -6)...]) // -> "UVWXYZ" 指定インデックスから終端まで、その2 print(text[text.index(text.startIndex, offsetBy: 10)..<text.index(text.endIndex, offsetBy: -10)]) // -> "KLMNOP" 開始~終了指定
なるほど、わからないわけだ。
終端は指定しなければよしなに解釈してくれるのか。
実装完了
結局、こうしてみた。
let address = "154-00xx 東京都世田谷区〜" var editAddresss: String = "" if let startIndex = address.index(of: "都") { editAddresss = String(address[startIndex...]) editAddresss = String(editAddresss[editAddresss.index(editAddresss.startIndex, offsetBy: 1)...]) }
求めるものは得られたんだけど、うーーーーん。力技否めないw