前提・実現したいこと
文字列を正規表現で分けて配列に追加したいのですが、エラーが出てしまっています。
元々Kotlinの実装で問題なく使用できていたので、swift側の処理で問題が起きているのだと思うのですが原因がわからないため、問題の原因と、解決方法をご教示いただきたいです。
よろしくお願いします!
発生している問題・エラーメッセージ
Fatal error: String index is out of bounds: file Swift/StringCharacterView.swift, line 60
該当のソースコード
Swift
1let string = "Google,Amazon,Facebook,Apple" 2let pattern = "\"([^\"]+?)\",?|([^,]+),?|," 3let regex = try! NSRegularExpression(pattern: pattern, options: []) 4let results = regex.matches(in: string, options: [], range: NSRange(0..<string.count)) 5var texts: [String] = [] 6 7for result in results { 8 for i in 0..<result.numberOfRanges { 9 let start = string.index(string.startIndex, offsetBy: result.range(at: i).location) 10 let end = string.index(start, offsetBy: result.range(at: i).length) 11 let text = String(string[start..<end]) 12 texts.append(text) 13 print(texts) 14 } 15}
処理は以下のサイトを参考にしました。
https://www.2nd-walker.com/2020/04/21/swift-how-to-use-nsregularexpression/
移植元のKotlinでは以下のコードで期待通りに動作しています。
Kotlin
1fun test(): List<String> { 2 val pattern = "\"([^\"]+?)\",?|([^,]+),?|,".toPattern() 3 val string = "Google,Amazon,Facebook,Apple,Asia" 4 val matcher = pattern.matcher(string) 5 val texts = mutableListOf<String>() 6 while (matcher.find()) { 7 texts.add(matcher.group()) 8 } 9 return texts.toList() 10}
実行結果: [Google,, Amazon,, Facebook,, Apple,, Asia]
,,
となっているのは想定通りですので気にしないでください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/14 03:33