【Swift4】”154-xxxx 東京都世田谷区〜”という文字列の”都”から前を切り捨てたい。swiftで!

研究
この記事は約3分で読めます。

この記事は2年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

はじめに

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要24言語に対応。プログラミング学習にも。

ここ、ちょっとした検証にめちゃくちゃ便利。
それはさておき

今回のミッション

$address = "154-00xx 東京都世田谷区〜";
$char_strlen = strlen("都"); // 3バイト文字でもいいように先頭からの位置を求めておく
$result = substr($address, strpos($address, "都")+$char_strlen, strlen($address));
echo($result); // 「世田谷区〜」が返ってくる

こういうことをswiftでやりたいのですよ。

strpos($address, "都")

ハマって数時間、ここに辿り着けてないんです。
ここを見る限りでは

Swift 4 で substring 的にインデックスを指定して部分文字列を取り出す方法
 Swift 4 になって、またまた文字列の扱いが変わりました。  その中でも、今回は表題の通り、Swift 4 の String から substring ...
// 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

コメント

タイトルとURLをコピーしました