LoginSignup
0
0

More than 5 years have passed since last update.

【Swift】reduceを使って文字列から"\r\n"、"\n"を抜く

Posted at

はじめに

表示領域の節約のために、文字列から改行コード(\r\n\n)を抜いて代わりにスペース(" ")を入れた文字を表示させるという仕様が、担当しているサービスにありました。

これを簡潔に書くと以下のようになると思います。

let text = "このテキスト内には\n改行コード\r\nが含まれてします。\n"
var noNewLineText = text.stringByReplacingOccurrencesOfString("\r\n", withString: " ", options: [], range: text.startIndex..<text.endIndex)
noNewLineText = noNewLineText.stringByReplacingOccurrencesOfString("\n", withString: " ", options: [], range: noNewLineText.startIndex..<noNewLineText.endIndex)
print(text) //このテキスト内には 改行コード が含まれてします。

同じメソッドを複数回呼び出したり、varを使って再代入するなどあまりSwiftらしい書き方とは言えないものになってしまっています。

reduceを使う

\n\r\nを配列に持たせて、reduceを使ってみましょう。

let text = "このテキスト内には\n改行コード\r\nが含まれてします。\n"
let noNewLineText = ["\r\n", "\n"].reduce(text) {
    return $0.0.stringByReplacingOccurrencesOfString($0.1, withString: " ", options: [], range: $0.0.startIndex..<$0.0.endIndex)
}
print(noNewLineText) //このテキスト内には 改行コード が含まれてします。

初期値をtextとすることで、初回の$0.0textとなります。その時の$0.1\r\nなので、返す値はtext中の\r\n" "に置き換えられたStringとなります。
そのため、次の$0.0text中の\r\n" "に置き換えられたStringなので、最終的に出力される値は、text中の\r\n\n" "に置き換えられたStringとなります。

このようにreduceでも該当の文字を除外することが簡単にできます。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0