疑問は次々に出てくるかと思いますが、まずは過去のご質問を一つひとつクリアし、その段階でわからなかったことをきちんと理解してから、次のステップに進まれるのが良いかと思います。
過去のご質問81に対し、解決済みが36というのはちょっといかがなものかと思っています。
ところで、
この158
という数字はどこから出てきたのでしょうか。
試しに
Swift
1var dataList = ["アマランサス 玄穀", "あわ 精白粒", "あわ あわもち", "えんばく オートミール", "おおむぎ七分つき押麦", "おおむぎ 押麦", "おおむぎ 米粒麦", "おおむぎ 大麦めん 乾", "おおむぎ 大麦めん ゆで"]
の中で定義されている文字の数を数えてみましたが90ちょっとしかありませんでした。
もしかしたらこの時点で既に誤解しているのかもしれません。
Swift
1 let uuu = dataList[i].split(separator: ",")
dataList[i]
には、"アマランサス 玄穀"
や"あわ 精白粒"
といった文字列が入ってきます。これらの文字列には,
が含まれていませんので、uuu
とdataList[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() }
といった感じでしょうか。