読み込み中...

Javaでtrimメソッドを使いこなそう!12の方法で徹底理解!

Javaのtrimメソッドの徹底解説とサンプルコード Java
この記事は約24分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

文字列を扱うプログラミングはよくありますよね。

特にJavaでよく使う操作として、文字列の前後にある不要な空白を取り除く「trimメソッド」があります。

このtrimメソッド、一見単純そうですが、実は多くの使い方や注意点があります。

この記事では、そんなtrimメソッドの全てを網羅的に解説していきます。

基本的な使い方から、応用例、注意点、カスタマイズ方法まで、これ一本でtrimメソッドをマスターできます。

●Javaとは

Javaとは、1990年代にSun Microsystems(現在はOracle社が所有)によって開発されたプログラミング言語です。

C++に似た文法を持ちながら、より簡単に、そして安全にプログラムを作成できるように設計されています。

○Javaが広く使用される理由

Javaが広く使用される理由はいくつかありますが、その中でも特に注目すべきは次の三点です。

  1. プラットフォームに依存しない:Javaで書かれたプログラムは、異なるプラットフォームで実行できます。
  2. 豊富なライブラリ:標準で提供されるライブラリが非常に多く、様々な機能を簡単に利用できます。
  3. 堅牢性と安全性:Javaは堅牢性と安全性に優れた言語であり、大規模なビジネスアプリケーションでもよく用いられます。

Javaでの文字列操作は非常に一般的であり、特にWebアプリケーションやデータ解析、ファイル処理などで頻繁に行われます。

そんな中で、文字列の前後から不要な空白を取り除く操作は、データの正確性を保つ上でも非常に重要です。

そこで登場するのが、この記事の主役である「trimメソッド」です。

●trimメソッドの基本

○trimメソッドとは

Javaのtrimメソッドは、文字列の先頭と末尾にある空白を取り除くためのメソッドです。

具体的には、文字列の先頭から最初の非空白文字が見つかるまで、そして文字列の末尾から最後の非空白文字が見つかるまで、全ての空白文字を取り除きます。

たとえば、" こんにちは "という文字列があった場合、trimメソッドを使用すると、前後の空白が取り除かれて"こんにちは"という形になります。

○trimメソッドの使用ケース

trimメソッドがよく用いられるケースは多々ありますが、その代表的な例を簡単に紹介します。

  1. フォーム入力の検証:ユーザーがフォームに入力した内容が意図した形式になっているかを確認する際に使われます。
  2. データベースのデータ処理:データベースから取得した文字列データが不必要な空白を含んでいる可能性があります。
  3. テキスト解析:大量のテキストデータを解析する際、不必要な空白が解析結果に影響を与えることを防ぐためにも用います。
  4. ファイルの読み込みと書き込み:テキストファイルやCSVファイルを扱う際、行頭や行末の空白を取り除くためにも使われます。

●trimメソッドの使い方

Javaで文字列の前後の余計なスペースを取り除く際には、trimメソッドを使用します。

このメソッドは、文字列の先頭および末尾に存在する空白を取り除くことができる非常に便利なものです。

○サンプルコード1:基本的なtrimメソッドの使い方

まずは、基本的なtrimメソッドの使い方から見ていきましょう。

public class TrimExample {
    public static void main(String[] args) {
        String str = "   こんにちは   ";
        String trimmedStr = str.trim();
        System.out.println(trimmedStr);
    }
}

このコードでは、文字列” こんにちは “から前後の空白を取り除いています。

trimメソッドを使用することで、出力される文字列は”こんにちは”となり、余計な空白が除去されます。

○サンプルコード2:文字列配列でのtrimメソッドの使い方

次に、文字列配列のそれぞれの要素に対してtrimメソッドを適用する方法を見ていきましょう。

public class TrimArrayExample {
    public static void main(String[] args) {
        String[] strings = {"   apple   ", "  banana  ", " grape "};
        for (int i = 0; i < strings.length; i++) {
            strings[i] = strings[i].trim();
            System.out.println(strings[i]);
        }
    }
}

このコードでは、文字列配列stringsの各要素に対してループを回しながら、その要素の前後の空白をtrimメソッドで取り除いています。

したがって、出力される結果は次のようになります。

apple
banana
grape

余分な空白が取り除かれ、期待通りの結果が得られることが確認できます。

○サンプルコード3:trimメソッドとnull値

trimメソッドは非常に便利ですが、null値が渡された場合にはどうなるのでしょうか。

この部分はしばしば初心者にとって罠となります。null値に対してtrimメソッドを実行しようとすると、NullPointerExceptionが発生します。

その挙動を確認するためのサンプルコードを紹介します。

public class TrimNullExample {
    public static void main(String[] args) {
        String str = null;
        try {
            String trimmedStr = str.trim();
            System.out.println(trimmedStr);
        } catch (NullPointerException e) {
            System.out.println("NullPointerExceptionが発生しました");
        }
    }
}

このコードでは、最初にstrという変数をnull値で初期化しています。

その後、str.trim()としてtrimメソッドを呼び出しようとしていますが、その結果としてNullPointerExceptionが発生します。

この例ではtry-catchブロックを用いて例外をキャッチしていますので、「NullPointerExceptionが発生しました」というメッセージがコンソールに出力されます。

○サンプルコード4:trimメソッドと特殊文字

trimメソッドは基本的にはスペースを取り除きますが、他の特殊文字に対してはどうでしょうか。

たとえば、タブや改行なども文字列の前後に存在する場合があります。

public class TrimSpecialCharsExample {
    public static void main(String[] args) {
        String str = "\t こんにちは\n";
        String trimmedStr = str.trim();
        System.out.println("[" + trimmedStr + "]");
    }
}

このコードでは、文字列がタブ(\t)と改行(\n)で囲まれています。

trimメソッドを適用すると、これらの特殊文字も取り除かれます。

出力される文字列は[こんにちは]となり、タブと改行が取り除かれていることが確認できます。

○サンプルコード5:複数の空白を取り除く

Javaのtrimメソッドを使用すると、文字列の前後にある単一または複数のスペースを簡単に削除することができます。

しかし、文字列内部に複数の連続するスペースがある場合、trimメソッドだけでは削除できません。

このような場合、正規表現を使用すると効率的に対処することができます。

ここでのサンプルコードでは、replaceAllメソッドを用いて文字列内の複数の連続するスペースを1つのスペースに置き換える方法を説明します。

public class TrimMultipleSpacesExample {
    public static void main(String[] args) {
        // 複数のスペースが含まれる文字列
        String str = "Java    プログラミング     学習";
        // 連続するスペースを一つに置き換える
        String replacedStr = str.replaceAll("\\s+", " ");
        System.out.println(replacedStr);
    }
}

このコードでは、str変数に"Java プログラミング 学習"という複数のスペースが含まれる文字列を代入しています。

次にreplaceAllメソッドを使い、正規表現\\s+で複数の連続するスペース(またはタブ、改行など)を一つのスペースに置き換えています。

コンソールには"Java プログラミング 学習"と出力され、複数のスペースが一つに置き換えられているのが確認できます。

このコードを実行すると、多数のスペースは単一のスペースに変換されます。

具体的には、"Java プログラミング 学習"という文字列が"Java プログラミング 学習"となります。

それによって、文字列が整形され、可読性が向上します。

●trimメソッドの応用例

trimメソッドはシンプルなものでありながら、その応用範囲は意外と広いです。

ここでは、いくつかの実践的な例を取り上げ、その多様性と便利さを解説します。

○サンプルコード6:trimメソッドを使った入力検証

プログラムでユーザからの入力を受け取る際、意図しないスペースが含まれていることがよくあります。

trimメソッドはこのような場合に非常に役立ちます。

import java.util.Scanner;

public class InputValidationWithTrim {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("ユーザ名を入力してください:");

        String username = sc.nextLine();
        username = username.trim(); // 空白の除去

        if(username.isEmpty()) {
            System.out.println("ユーザ名は空にできません");
        } else {
            System.out.println("ようこそ、" + username + "さん");
        }
        sc.close();
    }
}

このコードでは、Scannerクラスを使用してユーザからの入力を受け取っています。

その後、trimメソッドで入力された文字列から前後のスペースを除去しています。

最後に、isEmptyメソッドで文字列が空かどうかを判定しています。

trimメソッドで空白を除去した結果、ユーザ名が空になっていたらエラーメッセージが表示されます。

○サンプルコード7:trimメソッドを用いたCSVファイルの処理

CSVファイルをJavaで処理する際、各フィールドに余計なスペースが含まれることがあります。

このような場合にもtrimメソッドが役立ちます。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CSVReaderWithTrim {
    public static void main(String[] args) {
        try(BufferedReader br = new BufferedReader(new FileReader("example.csv"))) {
            String line;
            while((line = br.readLine()) != null) {
                String[] values = line.split(",");
                for(int i = 0; i < values.length; i++) {
                    values[i] = values[i].trim(); // 空白の除去
                }
                System.out.println("読み取った値: " + String.join(", ", values));
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

このコードはCSVファイルexample.csvを読み込み、各行をsplitメソッドでカンマに基づいて分割しています。

その後、各要素にtrimメソッドを適用して余計なスペースを削除しています。

このコードを実行すると、CSVファイルから読み取った各フィールドの値がスペースなしでコンソールに出力されます。

例えば、CSVファイルにapple , banana , cherryというデータがあれば、出力は読み取った値: apple, banana, cherryとなります。

○サンプルコード8:trimメソッドとStringBuilder

文字列の前後にあるスペースを削除することは、trimメソッドを用いると非常に容易ですが、中間にある不要なスペースについてはどうでしょうか?

ここでは、StringBuilderを使って、文字列内の不要なスペースを効率的に取り除く方法を解説します。

public class RemoveSpaces {
    public static void main(String[] args) {
        String str = "  Java  Programming   ";
        StringBuilder sb = new StringBuilder();

        // 文字列の前後にある空白を削除
        String trimmedStr = str.trim();

        // StringBuilderを使用して空白を削除
        for(char c : trimmedStr.toCharArray()) {
            if(c != ' ') {
                sb.append(c);
            }
        }

        // 結果を出力
        System.out.println("Before: \"" + str + "\"");
        System.out.println("After: \"" + sb.toString() + "\"");
    }
}

このコードは、まずtrimメソッドで文字列strの前後にあるスペースを削除しています。

その後、StringBuilderappendメソッドを使い、空白以外の文字だけを新しい文字列に追加しています。

最後に、変換前と変換後の文字列を出力しています。

このコードを実行すると、”Before: ” Java Programming “” と “After: “JavaProgramming”” が出力されます。

すなわち、文字列の前後だけでなく、間に挟まれた不要なスペースも全て削除された結果が得られます。

○サンプルコード9:trimメソッドを使ったログ処理

ログを生成や解析する際、余計なスペースが含まれていると問題になる場合があります。

そのような場合にtrimメソッドが非常に役立ちます。

public class LogProcessor {
    public static void main(String[] args) {
        String logEntry = "  ERROR: File not found   ";

        // trimメソッドでログエントリから余計なスペースを削除
        String cleanedLogEntry = logEntry.trim();

        if (cleanedLogEntry.startsWith("ERROR")) {
            System.out.println("警告: エラーログが見つかりました。");
        }
    }
}

このコードでは、ログエントリの例としてlogEntry変数に” ERROR: File not found “という文字列を用います。

その後、trimメソッドでこの文字列から前後のスペースを除去し、エラーログがあるかどうかをstartsWithメソッドで判定しています。

このコードの実行結果としては、”警告: エラーログが見つかりました。”というメッセージが出力されます。

余計なスペースが含まれていたとしても、trimメソッドの使用により、正確にログの内容を判定できました。

○サンプルコード10:trimメソッドと正規表現

Javaのtrimメソッドは、文字列の前後に存在する空白を除去するのに特化しています。

しかし、文字列内にある特定のパターンの文字列を効率よく削除または置換したい場合はどうすればいいでしょうか。

そのような場合に、正規表現(Regular Expression)が役立ちます。

trimメソッドと正規表現を組み合わせたJavaのサンプルコードを紹介します。

public class TrimWithRegex {
    public static void main(String[] args) {
        String text = "  Java  Programming 101 ";

        // trimメソッドで前後の空白を除去
        String trimmedText = text.trim();

        // 正規表現で文字列内の単語と単語の間の連続する空白を単一の空白に置換
        String replacedText = trimmedText.replaceAll("\\s+", " ");

        System.out.println("元のテキスト: " + text);
        System.out.println("正規表現を使用した後のテキスト: " + replacedText);
    }
}

このコードでは、まずtrimメソッドを用いてtext変数の文字列の前後の空白を除去しています。

その後、replaceAllメソッドと正規表現\\s+を用いて、文字列内の連続する空白(単語と単語の間に複数存在する空白)を単一の空白に置換しています。

このコードを実行すると、コンソール上に次のように出力されます。

元のテキスト:   Java  Programming 101 
正規表現を使用した後のテキスト: Java Programming 101

trimメソッドによって前後の余計な空白が除去され、さらに正規表現によって文字列内の連続する空白も単一の空白に置換された結果が得られます。

○サンプルコード11:trimメソッドでのJSONデータ処理

JSONデータをJavaで処理する際にも、trimメソッドが役立つ場面は多いです。

特に、JSON文字列がファイルやネットワークから読み込まれるケースでは、前後に余計な空白が含まれていることもあります。

import com.google.gson.Gson;

public class TrimJson {
    public static void main(String[] args) {
        // 余計な空白が含まれたJSON文字列
        String jsonStr = "   { \"name\": \"John\", \"age\": 30 }   ";

        // trimメソッドで余計な空白を除去
        String trimmedJsonStr = jsonStr.trim();

        // Gsonライブラリを使ってJSONデータをJavaオブジェクトに変換
        Gson gson = new Gson();
        Person person = gson.fromJson(trimmedJsonStr, Person.class);

        System.out.println("名前: " + person.name);
        System.out.println("年齢: " + person.age);
    }

    class Person {
        String name;
        int age;
    }
}

このコードは、trimメソッドでJSON文字列の前後の余計な空白を除去した後、Gsonライブラリを使ってJSONデータをJavaオブジェクトに変換しています。

このコードを実行すると、コンソール上に「名前: John」と「年齢: 30」と表示されます。

これにより、余計な空白があっても正確にJSONデータがJavaオブジェクトに変換されたことが確認できます。

○サンプルコード12:trimメソッドとStream API

JavaのStream APIは、データの並列処理や高度なデータ操作を可能にする強力なツールです。

ここでは、trimメソッドとStream APIを組み合わせて、複数の文字列を効率的に処理する方法を詳しく解説します。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TrimWithStreamAPI {
    public static void main(String[] args) {
        List<String> words = Arrays.asList(" apple ", " banana ", " cherry ");

        // Stream APIを使ってtrim処理
        List<String> trimmedWords = words.stream()
                                         .map(String::trim)
                                         .collect(Collectors.toList());

        // 処理結果の表示
        for (String word : trimmedWords) {
            System.out.println(word);
        }
    }
}

このコードでは、まずArrays.asListメソッドで前後に空白が含まれる複数の文字列からなるリストwordsを作成しています。

次に、Stream APImapメソッドを用いて各要素にtrimメソッドを適用し、その結果を新たなリストtrimmedWordsに保存しています。

最後に、forループを使ってリストの内容を表示しています。

このコードを実行すると、次のような出力が得られます。

apple
banana
cherry

各文字列の前後にあった空白が取り除かれていることが確認できます。

このようにして、Stream APIとtrimメソッドを組み合わせることで、一連の文字列に対する空白の削除が簡単かつ効率的に行えます。

Stream APIとtrimメソッドの組み合わせは、大量の文字列データを高速に処理する際に非常に便利です。

例えば、テキストファイルから読み取った行に対して前後の空白を削除したい場合や、データベースから取得したレコードに対して同様の処理を行いたい場合などに使用できます。

●注意点と対処法

trimメソッドは非常に便利ですが、いくつかの注意点もあります。

ここではそれらの注意点と対処法について詳しく解説します。

○trimメソッドのパフォーマンス

一見シンプルなtrimメソッドでも、大量の文字列を処理する場合にはパフォーマンスが気になるポイントとなることがあります。

そのため、特定の条件下でパフォーマンスを向上させる方法を考慮することが重要です。

public class TrimPerformanceTest {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            String s = "  This is a test string  ";
            s = s.trim();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Elapsed time: " + (endTime - startTime) + " ms");
    }
}

上記のコードでは、System.currentTimeMillis()を使用してtrimメソッドを一百万回実行する時間を計測しています。

これにより、trimメソッドの実行にどれくらいの時間がかかるかを確認できます。

コードを実行すると、通常は数十ミリ秒程度の結果が得られますが、これはシステムの状態や他のプロセスによって異なる場合があります。

○特殊文字に関する注意

trimメソッドはUnicodeの空白文字に対応していますが、全角空白などの特殊な空白文字は削除できません。

public class TrimSpecialCharacter {
    public static void main(String[] args) {
        String s = " 全角スペース ";
        String result = s.trim();
        System.out.println(result.equals(s));
    }
}

このコードでは全角スペースを含む文字列strimメソッドで処理しています。

trimメソッドは全角スペースを削除しないため、result.equals(s)trueを返します。

○nullとの相互作用に関する注意

JavaのStringクラスのtrimメソッドは、引数としてnullを受け取るとNullPointerExceptionをスローします。

public class TrimWithNull {
    public static void main(String[] args) {
        String s = null;
        try {
            String result = s.trim();
        } catch (NullPointerException e) {
            System.out.println("NullPointerException caught");
        }
    }
}

このコードを実行すると、「NullPointerException caught」というメッセージが表示されます。

これは、trimメソッドがnull値に対してNullPointerExceptionをスローするためです。

●カスタマイズ方法

trimメソッドの基本的な機能に加えて、独自の要件に対応するためのカスタマイズも考慮することがあります。

ここでは、特定の文字や特定のパターンに合致する余計な部分を削除するカスタムtrim関数の作成方法について説明します。

○カスタムtrim関数の作り方

Javaで独自のtrim関数を作成する場面もあります。

例えば、特定の文字だけを取り除いたり、前後だけでなく文字列中の余計な空白も取り除くような処理が求められる場合などです。

public class CustomTrim {
    public static String trimSpecificChar(String str, char ch) {
        int start = 0;
        int end = str.length();

        // 文字列の先頭から特定の文字を探す
        while (start < end && str.charAt(start) == ch) {
            start++;
        }

        // 文字列の末尾から特定の文字を探す
        while (start < end && str.charAt(end - 1) == ch) {
            end--;
        }

        return str.substring(start, end);
    }

    public static void main(String[] args) {
        String s = "****Java****";
        String result = trimSpecificChar(s, '*');
        System.out.println(result);
    }
}

このコードではtrimSpecificCharというメソッドを定義しています。

このメソッドは、指定した文字chを文字列strの前後から削除します。

文字列の先頭と末尾から順番に特定の文字を探し、その位置を基にsubstringメソッドで新しい文字列を生成します。

このコードを実行すると、出力される結果はJavaになります。

つまり、****Java****という文字列から前後の*がしっかりと削除されたわけです。

まとめ

Javaでの文字列処理において、trimメソッドは非常に有用なツールです。

文字列の前後から余分な空白を簡単に取り除くことができますが、この記事で解説したように、それだけではありません。

trimメソッドの使用ケースは多岐に渡り、CSVファイルの処理からJSONデータの操作、ログ処理など、さまざまな場面でその価値を発揮します。

この記事では、基本的な使い方から応用例、そしてカスタマイズ方法まで、trimメソッドを使ったJavaでの文字列処理について広範かつ詳細にわたって解説しました。

Javaを用いたプログラミングがさらに効率的かつ効果的になるよう、この知識を活かしてください。

この記事が、Javaプログラミングで文字列を扱う際の参考になれば幸いです。