質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

662閲覧

Swift 特定の開始位置から末尾までの文字列を取得したい。

ataru2222

総合スコア272

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2022/09/17 20:43

実現したいこと

Swift の文字列操作で特定の開始位置から末尾までの文字列を取得したい。

https://java-code.jp/795
こちらのサイトで書かれているSubstringメソッドの次のような書き方です。

java

1String str = "Good Morning Everyone."; 2 System.out.println(str.substring(5)); // 結果:Morning Everyone.

試したこと

文字列変換について調べてみたのですが、
indexで特定の位置から特定の位置までの切り抜きはあったのですが、
特定の位置から最後までの記述は見つかりませんでした。

https://softmoco.com/swift-basics/swift-string-substring.php
https://www.motokis-brain.com/article/64

Swiftでは特定の位置から最後まで取得することはできないのでしょうか?
特定の開始位置から、text.countで文字数全体を取得したらいけそうな気はするのですが、一撃で取得できそうなのが、範囲を選択してあげないと取れないことにモヤモヤして質問させていただきました。

こちらについて詳しい方いらっしゃいましたらご教授願います。
よろしくお願いいたします。

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

dropFirst

先頭から指定した文字数を削ります。
cf. https://developer.apple.com/documentation/swift/string/dropfirst(_:)

swift

1print(str.dropFirst(5)) 2//=> Morning Everyone.

suffix

末尾から指定した文字数を取得します。
cf. https://developer.apple.com/documentation/swift/string/suffix(_:)

swift

1print(str.suffix(str.count - 5)) 2//=> Morning Everyone.

投稿2022/09/18 10:29

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ataru2222

2022/09/18 12:14

fuzzball様 まさに求めていたコードはこれでした。 モヤモヤが取れてかなりスッキリしました。 本当にありがとうございました。
guest

0

質問の中で参照したと書かれているサイト
https://softmoco.com/swift-basics/swift-string-substring.php
の「Swift で文字の開始位置を指定して切り出す」に書かれている通り、

swift

1let start = 3 2let startIdx = s.index(s.startIndex, offsetBy: start, limitedBy: s.endIndex) ?? s.endIndex 3let sub = String(s[startIdx...])

のようにして、文字列の範囲を指定する箇所に startIdx... を指定したのではダメなのですか?

また、切り出し元の文字列がさほど大きくない場合は

swift

1let start = 3 2let sub = String(Array(s)[start...])

のようにして、s全体をString.Elementの配列に変換し、その部分配列を文字列に戻すようにすれば、
String.Indexを使わずに、シンプルに書く事ができます。

いずれにしても、指定位置以降の全ての文字列を指定したい場合は、 start... のように
PartialRangeFromを使って範囲を指定すればよいと思います。

投稿2022/09/18 00:24

編集2022/09/18 02:09
TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ataru2222

2022/09/18 12:17

TakeOne様 回答、解説していただき、ありがとうございました。 今回自分が求めていたのは、dropFirst()という書き方でしたが、 このような書き方もあることしっかり覚えておきます。 本当にありがとうございました。
guest

0

その文字列の長さを求めれば、末尾(最後の文字)の位置を出すことができます

投稿2022/09/17 22:19

編集2022/09/17 22:20
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ataru2222

2022/09/18 12:18

y_waiwai様 今回の求めていた書き方はdropFirst()という書き方ということが判明いたしました。 回答していただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問