3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

文字列内の空白文字(半角空白)をトリミング

Last updated at Posted at 2016-09-10

コトの発端

まずは、何の変哲もない入力フォームについて紹介します。
以下の画面では、植物名の登録を行おうとしています。
スクリーンショット 2016-09-10 18.48.09.png

でも、手が滑ってしまい、文字列の前に数行ほど空白が...
しかも不幸なことに、勢い余って登録ボタンも押してしまいました。
スクリーンショット 2016-09-10 18.47.42.png

すると、

結果はこうなりました。
スクリーンショット 2016-09-10 18.59.06.png

本来ならこうであって欲しいと思うのが普通かと...
スクリーンショット 2016-09-10 18.58.37.png
たとえ誤って文字列に空白が含まれていたとしても、
こんなの気持ち悪いですね。

前置きが長くなってすみませんでした。
早速、今回のテーマについてご紹介致します。

特定の文字列を取り除きたい

文字列の操作を行うとき、文字列同士の結合などはよく教科書やサイトでも説明がなされていますが、他にも知っておくと便利なものがあります。今回私が紹介したいのは、文字列の中から特定の文字を取り除たい場合などに使用できるメソッドについてです。

NSCharacterSetクラス

これは、Unicodeに準拠した文字セットを提供するクラスです。NSStringオブジェクトやNSScannerオブジェクトで文字を検索するときには、とても心強い味方になります。詳しくはこちらを参考にするといいでしょう。

空白を指定する場合には、NSCharacterSet(iOS Developer Libraryより)から次のクラスメソットを指定します。

+ whitespaceCharacterSet

また、空白だけでなく改行も含めたい場合には、

+ whitespaceAndNewlineCharacterSet

を使えば改行も指定することができます。

stringByTrimmingCharactersInSetメソッド

これはNSStringクラスに所属するインスタンス・メソッドで、第1引数の文字列から第2引数の文字列セットを取り除くという作業を行ってくれます。(Apple API Reference


- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;

使用例

次のようなメソッドを定義してはどうでしょう。
必要に応じて空白除去フィルターとして利用できるかと思います。


- (NSString *)trimSpaceWithText:(NSString *)text {
    NSCharacterSet *space = [NSCharacterSet whitespaceCharacterSet];
    return [text stringByTrimmingCharactersInSet:space];
}

まとめ

私のアプリでは文字数チェックと合わせて使用しています。
ラベルなどの差し込み文字列 + 定型文字など、空白ままを表示させるのに適さない部分では、空白の文字列はなんとかして禁止する必要があるからです。

(例1) アサガオの記録

(例2) アサガオの様子

文字なし、空白(Space)のみの場合、登録処理に制限をかけています。

以上です。

他のやり方、もっと良い方法などがありましたら、
是非ご教示頂ければ幸いです。

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?