[C#] 文字列の空白を削除する方法まとめ [Trim/Replace/LINQ]

C#

この記事では、C#で文字列の空白を削除する方法を解説します。

ファイルから読み込んだテキストやユーザー入力された文字列を処理するとき、余計なスペースや改行が入っていて困ること、ありますよね。
今回は、そういう時に使える便利なテクニックをまとめて解説します!空白を削除する方法は複数ありますので、状況に応じて使い分けましょう!

ひつじさん
ひつじさん

邪魔者はみんな消してしまえばいい。そうですよね?

 

概要

空白の削除方法一覧

まず、C#で空白を削除する方法を簡単にまとめましたので確認していきましょう。

方法内容
Trim()前後のスペース、タブ、改行などを削除
TrimStart()先頭のスペース、タブ、改行などを削除
TrimEnd()末尾のスペース、タブ、改行などを削除
Replace(” “, “”)全ての半角スペースを削除
Regex.Replace(input, @”\s+”, “”)全てのスペース、タブ、改行などを削除
input.Where(c => !char.IsWhiteSpace(c))全てのスペース、タブ、改行などを削除

 

それぞれ削除する範囲や対象が異なりますので、次項でサンプルと共に詳しく解説していきます!

 

サンプル&詳細解説

前後の空白を削除(Trimメソッド)

前後の空白を削除したい時は、Trimメソッドを使いましょう。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "   Cat   Dog   ";

            // 前後の空白を削除
            string result = str.Trim();

            // 出力
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

実行結果

Cat   Dog

前後にあったスペースは削除されましたが、中間のスペースは残りました。
Trimメソッドは文字列の先頭と末尾の空白のみ削除するので、このような結果となります。

Trimメソッドは今回のように引数なしで使用すると、半角/全角スペース、改行文字、タブ文字などを空白として削除します。

引数に文字を指定すれば、指定した文字を削除できます。
指定する文字は、空白文字でなくても構いません。例えば、文字列の先頭と末尾に「@」が付いていてそれを消したい場合は、引数に「@」を指定すれば削除できます。

 

先頭の空白を削除(TrimStartメソッド)

先頭の空白のみを削除したい時は、TrimStartメソッドを使いましょう。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "    Cat   Dog   ";

            // 先頭の空白()を削除
            string result = str.TrimStart();

            // 出力
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

実行結果

Cat   Dog   

わかり辛いですが、先頭のスペースのみが削除されました。

引数を指定すれば指定文字を削除できる点は、Trimメソッドと同様です。

 

末尾の空白を削除(TrimEndメソッド)

TrimStartとは逆に、末尾の空白のみを削除したい時は、TrimEndメソッドを使いましょう。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "    Cat   Dog   ";

            // 末尾の空白を削除
            string result = str.TrimEnd();

            // 出力
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

実行結果

    Cat   Dog

先頭のスペースは残り、末尾のスペースのみが削除されました。

こちらも、Trimメソッドと同様に引数を指定すれば指定文字を削除できます。

 

全てのスペースを削除(String.Replaceメソッド)

String.Replaceメソッドを使えば、文字列中に含まれる全てのスペースを削除できます。

Replaceメソッドで、指定した文字を空文字に置き換えることで削除を実現しています。
以下のサンプルでは、半角スペースを空文字に置換しています。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "    Cat   Dog   ";

            // 全てのスペースを削除
            string replaced = str.Replace(" ", "");

            // 出力
            Console.WriteLine(replaced);
            Console.ReadKey();
        }
    }
}

実行結果

CatDog

文中の半角スペースが全て削除されました。

指定しているのは半角スペースのみですので、全角スペース、改行コード、タブ文字などは削除されません
そのため、Replaceメソッドで改行コード等も削除したい場合は、ひとつひとつ指定して空文字に置換する必要があります。

Replaceメソッドの他の使い方については、以下の記事で解説していますので是非参考にしてみてください。

 

全ての空白を削除(Regex.Replaceメソッド)

Regex.Replaceメソッドを使えば、文中の全角/半角スペース、改行コード、タブ文字などをまとめて削除できます。

こちらの方法も、String.Replaceメソッドと同じく空文字に置換して削除を実現しています。
置換対象として1文字以上の空白文字(\s+)を指定しています。

サンプルコード

using System;
using System.Text.RegularExpressions;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "    Cat   Dog  ";

            // 全ての空白を削除
            string replaced = Regex.Replace(str, @"\s+", "");

            // 置換後の文字列を出力
            Console.WriteLine(replaced);
            Console.ReadKey();
        }
    }
}

実行結果

CatDog

 

Regex.Replace正規表現で対象を指定して文字列を置換するメソッドです。
他にも様々な使い方がありますので、以下の記事もぜひ読んでみてください。

 

全ての空白を削除(LINQ)

文中の全角/半角スペース、改行コード、タブ文字などをまとめて削除する方法として、LINQを使う方法もあります。

LINQ(Language Integrated Query)とは、C#でデータを簡潔に操作できる機能です。
SQLのような記述でリスト、データベース、XMLなどのデータに対して検索、変換、集計、フィルタリング、ソートなどできます。また、今回のように文字列を操作することもできます。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str = "    Cat   Dog  ";

            // 全ての空白を削除
            string result = new string(str.Where(c => !char.IsWhiteSpace(c)).ToArray());

            //文字列を出力
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

実行結果

CatDog

 

上記サンプルでは、Whereメソッドを使って文字列から条件に合う文字だけを取り出しています。
条件には「char.IsWhiteSpace(空白文字の判定メソッド)」を使っており、さらに(論理否定演算子)を付けているので「空白文字以外」を抽出する処理となっています。

 

まとめ

以下は当記事のまとめです!

  • 前後の空白を削除したい場合は、Trimメソッドが有効
  • 先頭のみ/末尾のみを削除したい場合は、TrimStart/TrimEndメソッドが有効
  • String.Replaceで文中の指定文字を全て削除できるが、1種類ずつしか指定できないので空白文字(スペース、改行、タブ等)をまとめて消すのには向いていない
  • 文中の空白文字(スペース、改行、タブ等)を全て消したい場合は、Regex.ReplaceメソッドLINQ(Wheteメソッド)を使うと良い。

以上です!

空白文字を削除する際は、対象となる文字や範囲をしっかり確認して適切な方法を選ぶようにしましょう!間違えて必要な文字まで消してしまうと大変ですからね!よろしく頼んます!

コメント

タイトルとURLをコピーしました