Javaで文字列の空白を削除する方法を現役エンジニアが解説【初心者向け】
初心者向けにJavaで文字列の空白を削除する方法について解説しています。ここではtrimメソッドを使った方法、replaceAllメソッドを使った方法を説明します。それぞれの用途と書き方を覚えましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
井上 祐介
Javaで文字列の空白を削除する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
入力された名前や電話番号に含まれる不要な空白文字を削除する方法が分かります。
目次
そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。
名前を入力させるプログラムを作っているんですが、余分なスペースが入っていてデータがそろわないんです・・・
山田 太郎 ,
山田 花子,
山田 三郎
それは大変だね。
文字列を扱うString型からstripメソッドやreplaceAllメソッドで余分な空白文字を削除した文字列を取得できるよ。
そんな便利な機能がString型にあるんですね。
そうなんだ。
文字列の前後の空白を削除するならstripメソッド、文字列中のすべての空白を削除するならreplaceAllメソッドが使えるよ。
どちらのメソッドも全角と半角スペースの両方に対応できるんだ。
そうなんですね!さっそく使い方を教えてください!
前後の空白を削除する(stripメソッド)
文字列を扱うStringクラスにあるstripメソッドで、文字列の前後にある半角スペースと全角スペースの空白文字を削除した文字列を取得します。
※stripメソッドは2017年から使えるようになったJava 11に含まれるメソッドです。stripメソッドが使えない場合、replaceAllメソッドかtrimメソッドを使います。replaceAllメソッドについては後半の解説記事「文字の間の空白を削除する(replaceAllメソッド)」、trimメソッドとstripメソッドの違いについては「stripメソッドとtrimメソッドの違い」の解説記事をご覧ください。
※文字の間にある空白文字を削除する場合は、後半の解説記事にあるreplaceAllメソッドを使います。
書式
結果を代入する変数 = String型.strip();
stripメソッドに引数はありません。
String型で宣言した変数などからstripメソッドを呼び出します。
stripメソッドを呼び出された文字列から文字列の前後の空白文字(半角スペースと全角スペース)を削除した文字列が返されます。
また、改行コードやタブコードなども同様に削除できます。
stripメソッドを呼び出した文字列そのものが変化するわけではなく、戻り値として結果が返ります。
【参考】Javaの特殊な文字
Javaでは改行やタブなどの特殊な文字を表現する方法があります。
特殊な文字の前に、エスケープシーケンス(\または¥)をつけます。
改行は「\n」(または¥n)、タブは「\t」(または¥t)と表記します。
※Windowsでは使用しているアプリやフォント(書体)により、バックスラッシュ(\)が円記号(¥)で表示される場合があります。
サンプルコード
前後に空白文字がある文字列から、前後の空白文字をstripメソッドで削除したものを取得します。
ソースコード
public class StripSample {
public static void main(String[] args) {
//前後に空白文字が入った文字列
String str_han_sp = " 前後に半角スペース ";
String str_zen_sp = " 前後に全角スペース ";
//加工前の文字列を表示
System.out.println("==" + str_han_sp + "==");
System.out.println("==" + str_zen_sp + "==");
//空白行を空ける
System.out.print("\n");
//前後の空白文字を削除
String str_han = str_han_sp.strip();
String str_zen = str_zen_sp.strip();
//結果を表示
System.out.println("==" + str_han + "==");
System.out.println("==" + str_zen + "==");
}
}
表示結果
== 前後に半角スペース ==
== 前後に全角スペース ==
==前後に半角スペース==
==前後に全角スペース==
解説
String str_han_sp = String str_han_sp = " 前後に半角スペース ";
String str_zen_sp = " 前後に全角スペース ";
前後に半角スペースと全角スペースが入った文字列をString型の変数として宣言します。
「前後に半角スペース」の前に3つ、後ろに5つの半角スペースがあります。
「前後に全角スペース」には前に2つ、後ろに3つの全角スペースがあります。
System.out.println("==" + str_han_sp + "==");
System.out.println("==" + str_zen_sp + "==");
前後に空白文字が入った文字列を、修正後と比較するために出力します。
文字列の前後に「==」を付けているのは、前後の空白文字の存在をわかりやすくするためです。
System.out.print("\n");
修正前後の表示を区別するため、改行(\n)を出力します。
printメソッドだけでは改行が行われませんが、「\n」を出力すると改行されます。
System.out.println("")でも空白行が出力できます。
String str_han = str_han_sp.strip();
String str_zen = str_zen_sp.strip();
String型である変数 str_han_spとstr_zen_spからstripメソッドを呼び出します。
stripメソッドによって、文字列の前後にある全角スペースも半角スペースも削除された文字列が返されます。
前後の空白文字が削除された文字列が変数 str_hanとstr_zenに代入されます。
System.out.println("==" + str_han + "==");
System.out.println("==" + str_zen + "==");
空白文字が削除された結果を表示します。
stripメソッドでは文字列の前後にある空白なら、いくつでもすべて削除してくれます。
空白文字がなくなったことがわかりやすいように、文字列の前後に「==」をつけて出力しています。
文字の間の空白を削除する(replaceAllメソッド)
文字列の間にある空白も削除したいときは、StringクラスのreplaceAllメソッドを使います。
replaceAllメソッドは指定した文字をすべて置換するため、文字列の前後だけでなく間にある文字も置き換えた結果を取得できます。
書式
//全角と半角のスペースを文字列全体から削除
結果を代入する変数 = String型.replaceAll(" | ", "");
replaceAllメソッドは文字列を置換した結果を取得するためのメソッドです。
第1引数に置き換えたい文字列を指定します。
削除したい空白が全角か半角のいずれかなら " "(全角スペース)や" "(半角スペース)のように指定できます。
全角と半角両方の空白を削除するときは、正規表現のパターンを使って" | "(全角と半角のスペースをパイプ「|」で区切る)と指定します。
正規表現で「|」パイプは左側か右側のどちらかの文字に一致するパターンを表します。
第2引数に置き換える文字列を指定します。
replaceAllメソッドを使って置き換えるときに文字列中から削除するには、第2引数に空文字(””)を指定します。
replaceAllメソッドで変化するのは取得する戻り値の文字列で、呼び出し元の文字列は変化しません。
※文字列を置換するメソッドとしてreplaceメソッドもあります。違いはreplaceAllメソッドなら正規表現を使って複雑な置換の条件を指定できることと、replaceメソッドは内部的にreplaceAllメソッドを呼び出しているため、replaceAllメソッドのほうがわずかに処理時間が速いことがあげられます。正規表現については「正規表現のルールとは」の記事をご覧ください。
※パイプ「|」は、日本語キーボードならシフトキーを押しながら右上の「¥」記号のキーを押すと入力できます。漢字入力はオフ(漢字やひらがなが入力できない状態)で入力します。
サンプルコード
前後や文字列中にある空白文字をreplaceAllメソッドで空文字列に置き換えて削除したものを取得します。
ソースコード
public class ReplaceAllSample {
public static void main(String[] args) {
//空白文字が入った文字列
String str_han_sp = " H E L L O ";
String str_zen_sp = " こ ん に ち は ";
//加工前の文字列を表示
System.out.println("==" + str_han_sp + "==");
System.out.println("==" + str_zen_sp + "==");
//空白行を空ける
System.out.print("\n");
//前後の空白文字を削除
String str_han = str_han_sp.replaceAll(" | ","");
String str_zen = str_zen_sp.replaceAll(" | ","");
//結果を表示
System.out.println("==" + str_han + "==");
System.out.println("==" + str_zen + "==");
}
}
表示結果
== H E L L O ==
== こ ん に ち は ==
==HELLO==
==こんにちは==
解説
String str_han_sp = " H E L L O ";
String str_zen_sp = " こ ん に ち は ";
前後と字の間に半角スペースと全角スペースが入った文字列をString型の変数として宣言します。
「 H E L L O 」の前に3つ、後ろに5つ、字の間に2つずつの半角スペースがあります。
「 こ ん に ち は 」には前に2つ、後ろに3つ、字の間に1つずつの全角スペースがあります。
System.out.println("==" + str_han_sp + "==");
System.out.println("==" + str_zen_sp + "==");
前後に空白文字が入った文字列を、修正後と比較するために出力します。
文字列の前後に「==」を付けているのは、前後の空白文字の存在をわかりやすくするためです。
System.out.print("\n");
修正前後の表示を区別するため、改行(\n)を出力します。
printメソッドだけでは改行が行われませんが、「\n」を出力すると改行されます。
System.out.println("")でも空白行が出力できます。
String str_han = str_han_sp.replaceAll(" | ","");
String str_zen = str_zen_sp.replaceAll(" | ","");
String型である変数 str_han_spとstr_zen_spからreplaceAllメソッドを呼び出します。
replaceAllメソッドの第1引数に「" | "」(左から全角スペース、|「パイプ」、半角スペース)とすることにより、置き換える対象が全角スペースか半角スペースのどちらかであることを正規表現で指定します。
第2引数の置き換える文字を「""」空文字列にする、つまり対象文字を削除します。
文字列中の空白文字が削除された結果が変数 str_hanとstr_zenに代入されます。
System.out.println("==" + str_han + "==");
System.out.println("==" + str_zen + "==");
空白文字が削除された結果を表示します。
replaceAllメソッドで文字列中や前後にある空白をすべて空文字列に置換して削除した結果を取得できます。
まとめ
この記事では、JavaのString型で空白文字を削除する方法について解説しました。
String型のstripメソッドによって、文字列の前後にある全角・半角スペースを削除できます。
文字列中の空白も削除するときはreplaceAllメソッドを使ってreplaceAll(“ | “, “”)のように呼び出します。
実際の開発で非常に役に立つ方法なので、ぜひ使ってみてください。
空白を削除する便利なメソッドがあったんですね。
前後の空白ならstripメソッド、文字の中の空白はreplaceAllメソッドで削除ですね。
そうだね。
replaceAllメソッドは削除というより、本来は文字列を置き換えるメソッドなんだけど空文字列を指定して文字を取り除くときにも使えるんだ。
replaceAllメソッドの引数にある正規表現っていうのは難しそうです。
たしかに正規表現を見ると、最初はとっつきにくいと感じるかもしれないね。
でも、正規表現を応用すれば数字だけのデータに電話番号のハイフンを付けてそろえたり、URLの文字列かどうかをチェックしたりと、文字列のチェックやデータをそろえるのに便利なんだ。
へぇー。なんだか便利そうですね。
また今度、正規表現についても教えてください!
Javaを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのJavaコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、JavaやServletの技術を使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!