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

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

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

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

Q&A

解決済

3回答

2279閲覧

空白を消したいがtrimmingCharacters(in: )ではできない

KTH

総合スコア86

Swift

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

0グッド

0クリップ

投稿2020/07/05 21:47

空白を消して配列に入れたいのですが.trimmingCharacters(in: .whitespaces)では空白が残ってしまいます
空白を消す方法を教えてください

swift

1var dataList = ["アマランサス 玄穀", "あわ 精白粒", "あわ あわもち", "えんばく オートミール", "おおむぎ七分つき押麦", "おおむぎ 押麦", "おおむぎ 米粒麦", "おおむぎ 大麦めん 乾", "おおむぎ 大麦めん ゆで] 2var pppp = [String]() 3 for i in 0...158{ 4 let uuu = dataList[i].split(separator: ",") 5 let jjj = String(uuu[3]) 6 let lll = jjj.trimmingCharacters(in: .whitespaces) 7 8 pppp.append(lll) 9 10 } 11 print(pppp) 12 print(dataList[0])

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

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

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

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

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

fuzzball

2020/07/06 00:06

「空白を消して配列に入れたい」を実現するようなコードに見えないので、何をしようとしているのかもう少し具体的に説明してください。また、この程度の長さのサンプルであれば、エラーの出ないコードを書いてください。
KTH

2020/07/06 01:59

replacingOccurrencesでできましたありがとうございました!
guest

回答3

0

自己解決

replacingOccurrences????

投稿2020/07/06 02:00

KTH

総合スコア86

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

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

0

疑問は次々に出てくるかと思いますが、まずは過去のご質問を一つひとつクリアし、その段階でわからなかったことをきちんと理解してから、次のステップに進まれるのが良いかと思います。

過去のご質問81に対し、解決済みが36というのはちょっといかがなものかと思っています。

ところで、

Swift

1for i in 0...158{

この158という数字はどこから出てきたのでしょうか。
試しに

Swift

1var dataList = ["アマランサス 玄穀", "あわ 精白粒", "あわ あわもち", "えんばく オートミール", "おおむぎ七分つき押麦", "おおむぎ 押麦", "おおむぎ 米粒麦", "おおむぎ 大麦めん 乾", "おおむぎ 大麦めん ゆで"]

の中で定義されている文字の数を数えてみましたが90ちょっとしかありませんでした。

もしかしたらこの時点で既に誤解しているのかもしれません。

Swift

1 let uuu = dataList[i].split(separator: ",")

dataList[i]には、"アマランサス 玄穀""あわ 精白粒"といった文字列が入ってきます。これらの文字列には,が含まれていませんので、uuudataList[i]は同じものとなります。

Swift

1 let jjj = String(uuu[3])

したがって、uuu[]には3番目の要素は存在せず、ここで実行時エラーとなってしまいます。
そもそも、uuu[3]には何が入ると期待していたのでしょうか。

また

Swift

1 let lll = jjj.trimmingCharacters(in: .whitespaces)

ここで使っているtrimmingCharacters(in:)ですが、

Returns a new string made by removing from both ends of the receiver characters contained in a given character set.

となっています。

や、日本語で解説されたページをみるとわかりますが、このメソッドは「指定した文字列の両端から、指定したセットの文字を削除する」メソッドとなっているため、期待通りの動作がしないことがわかります。

さて、指定された文字を一括して変換する方法があるといいのですが、私が確認した限り都合の良いメソッドはありませんでした(もしかしたら見落としかもしれませんが、それはどなたかが指摘してくれるでしょう)。

一発では変換できないので、一度指定した文字で文字列を分割したあと、それを再びくっつけるという方法で解決することにします。

冗長に書けば

Swift

1var result = [String]() 2 3for i in 0..<dataList.count { 4 // .whitespaceで定義された空白で一度分割 5 let components = dataList[i].components(separatedBy: .whitespaces) 6 // 分割された components[] をくっつける 7 let removedWhiteSpaceString = components.joined() 8 // 新しい配列に入れる 9 result.append(removedWhiteSpaceString) 10 11}

となりますが、一行で済ませるのであれば

Swift

1let newList = dataList.map { $0.components(separatedBy: .whitespaces).joined() }

といった感じでしょうか。

投稿2020/07/06 00:13

TsukubaDepot

総合スコア5086

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

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

0

トリミングというのは、文字列前後のスペースを除去するだけです。
途中のスペースを除去したいのであれば置換してください。

投稿2020/07/06 00:07

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問