読み込み中...

Javaのsubstringメソッドが初心者でもわかる10選の実用例

Javaのsubstringメソッドを解説するイラスト Java
この記事は約21分で読めます。

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

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

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

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

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

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

はじめに

この記事を読めばJavaのsubstringメソッドをマスターすることができるようになります。

文字列操作はプログラミングにおいて非常に一般的なタスクです。

特にJavaにおいては、多くのAPIやライブラリが文字列を活用しています。

そこで今回は、Javaのsubstringメソッドに焦点を当て、その使い方から応用例、注意点までを徹底的に解説します。

コードを書いていると、「この部分だけ切り出したいな」と思うことがよくありますよね。

そんな時に非常に便利なのが、このsubstringメソッドです。

●Javaとsubstringメソッドとは

○Java言語の概要

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

特にウェブアプリケーションやAndroidアプリケーションなど、多岐にわたる場面で使用されています。

Javaが提供する標準ライブラリには、数多くの便利なメソッドやクラスがあり、その一つがStringクラスとそのメソッドであるsubstringです。

○substringメソッドの基本

substringメソッドは、Stringクラスの一部として提供されており、文字列から指定した範囲の部分文字列を取得することができます。

具体的には、substring(int beginIndex, int endIndex)という形で使用します。

beginIndexは部分文字列が始まる位置(0から始まるインデックス)、endIndexは部分文字列が終わる位置です(この位置の文字は含まれません)。

// substringメソッドの基本的な使い方
public class Main {
    public static void main(String[] args) {
        // 元の文字列
        String original = "Hello, World!";

        // substringメソッドを使って部分文字列を取得
        String part = original.substring(0, 5);

        // 部分文字列を出力
        System.out.println(part);
    }
}

このコードを実行すると、Helloという部分文字列が出力されます。

この例では、元の文字列Hello, World!から0番目から5番目(5番目は含まれない)までの文字列を切り出しています。

●substringメソッドの使い方

substringメソッドの基本的な使い方を把握したところで、さまざまな使い方とその詳細について解説していきます。

コード例を交えて、初心者にもわかるように細かく説明していくので、最後まで読んでいただければ、substringメソッドの多様な使い方が身に付くでしょう。

○サンプルコード1:基本的なsubstringの使い方

まずは一番簡単な例から見ていきましょう。

public class Main {
    public static void main(String[] args) {
        String text = "JavaProgramming";
        String result = text.substring(4, 7);
        System.out.println(result);
    }
}

このコードでは、”JavaProgramming”という文字列からインデックス4から6までの部分文字列を取得しています。

つまり、取得される文字列は”Prog”です。

コードを実行すると、実際に”Prog”と出力されることを確認できます。

○サンプルコード2:文字列の途中から取得する方法

次に、文字列の途中から末尾まで取得する方法です。

public class Main {
    public static void main(String[] args) {
        String text = "JavaProgramming";
        String result = text.substring(4);
        System.out.println(result);
    }
}

このコードでは、substring(4)とした場合、インデックス4から最後までの文字列が取得されます。

この場合は”Programming”となります。確認すると、出力も”Programming”となることがわかります。

○サンプルコード3:特定の位置からの取得

最後に、特定の位置、例えば文字列の中の特定の文字から部分文字列を取得する方法を見てみましょう。

public class Main {
    public static void main(String[] args) {
        String text = "JavaProgramming";
        int index = text.indexOf("Pro");
        String result = text.substring(index, index + 3);
        System.out.println(result);
    }
}

このコードでは、indexOfメソッドを使って”Pro”という文字列が始まる位置を探し、その位置を基にsubstringメソッドを使っています。

具体的には、”Pro”が始まる位置をindexとし、indexからindex + 3までの部分文字列を取得しています。

この場合、取得される部分文字列は”Pro”となります。出力も”Pro”となることが確認できます。

●substringメソッドの応用例

基本的な使い方を一通り解説した後、さらに踏み込んでsubstringメソッドの応用例についても説明していきます。

ここで解説するテクニックを駆使することで、substringメソッドの可能性をさらに広げられるでしょう。

○サンプルコード4:特定の文字を基に部分文字列を取得

substringメソッドとindexOfメソッドを組み合わせることで、特定の文字を基準に部分文字列を取得することが可能です。

public class Main {
    public static void main(String[] args) {
        String text = "Java-is-awesome";
        int index = text.indexOf("-");
        String result = text.substring(0, index);
        System.out.println(result); // 出力結果は "Java"
    }
}

このコードではindexOfメソッドで”-“(ハイフン)が現れる最初の位置を調べ、その位置までの文字列をsubstringメソッドで取得しています。

この例では出力結果は”Java”となります。

○サンプルコード5:文字列の変換と組み合わせて使用

文字列を大文字や小文字に変換した後でsubstringメソッドを使用することもあります。

public class Main {
    public static void main(String[] args) {
        String text = "JavaIsAwesome";
        String upperText = text.toUpperCase();
        String result = upperText.substring(4, 6);
        System.out.println(result); // 出力結果は "IS"
    }
}

このコードでは、まずtoUpperCaseメソッドで文字列を全て大文字に変換してから、その後でsubstringメソッドを使っています。

この例ではインデックス4から5までの部分文字列”IS”が出力されます。

○サンプルコード6:複数の部分文字列を取得

Javaのsubstringメソッドを使って、複数の部分文字列を一度に取得するケースもよくあります。

これはたとえば、特定の形式に従った文字列からデータを抽出する場合などに役立ちます。

public class Main {
    public static void main(String[] args) {
        String text = "2022-09-24";
        String year = text.substring(0, 4);
        String month = text.substring(5, 7);
        String day = text.substring(8, 10);

        System.out.println("年: " + year);  // 出力結果は "年: 2022"
        System.out.println("月: " + month); // 出力結果は "月: 09"
        System.out.println("日: " + day);   // 出力結果は "日: 24"
    }
}

このコードでは、日付の文字列"2022-09-24"から年、月、日を取り出しています。

そのために、substringメソッドを3回連続で使用しています。

年は0から4文字目まで、月は5から7文字目まで、日は8から10文字目まで取得しています。

実行結果は、”年: 2022″、”月: 09″、”日: 24″がそれぞれ出力されます。

○サンプルコード7:正規表現との組み合わせ

正規表現とsubstringメソッドを組み合わせることで、より高度な文字列操作が可能になります。

下記の例では、正規表現を使用して文字列内にある数字だけを抽出し、その後でsubstringメソッドを用いて特定の数字を取得しています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String text = "Price: $25.50";
        Pattern pattern = Pattern.compile("\\d+\\.?\\d*");
        Matcher matcher = pattern.matcher(text);

        if (matcher.find()) {
            String price = matcher.group();
            String dollarPart = price.substring(0, price.indexOf("."));
            System.out.println("ドル部分: " + dollarPart); // 出力結果は "ドル部分: 25"
        }
    }
}

このコードでは、まずPatternMatcherクラスを使用して、文字列から数字部分を抽出します。

その後、substringindexOfメソッドを使って、抽出した金額からドルの部分(”.”より前の部分)を取り出しています。

この例では出力結果が”ドル部分: 25″になります。

○サンプルコード8:大文字・小文字の変換との組み合わせ

Javaにおけるsubstringメソッドは、文字列操作における多くのケースで利用可能です。

特に、文字列内の部分的な大文字・小文字変換と組み合わせることで、柔軟かつ効率的なコードを実現することができます。

public class Main {
    public static void main(String[] args) {
        String sentence = "hello world";
        String firstWord = sentence.substring(0, 5).toUpperCase();
        String secondWord = sentence.substring(6, 11).toUpperCase();

        String result = firstWord + " " + secondWord;
        System.out.println(result);  // 出力結果は "HELLO WORLD"
    }
}

このJavaのコード例では、sentenceという変数に格納された”hello world”という文字列の各単語を大文字に変換しています。

具体的には、substringメソッドで"hello""world"をそれぞれ切り出し、その後toUpperCase()メソッドを使って大文字に変換しています。

この結果として出力される文字列は”HELLO WORLD”です。

○サンプルコード9:trimメソッドとの連携

substringメソッドとtrimメソッドを組み合わせることで、余分なスペースがある場合でも期待する部分文字列を取得できます。

public class Main {
    public static void main(String[] args) {
        String text = "  Java Programming  ";
        String trimmed = text.trim();
        String target = trimmed.substring(5, 14);

        System.out.println("取得した部分文字列: " + target);  // 出力結果は "取得した部分文字列: Programmi"
    }
}

このJavaのコード例では、textという変数に格納された” Java Programming “という文字列から"Programmi"という部分文字列を取得しています。

この場合、先にtrimメソッドで文字列の両端の余分なスペースを取り除き、その後でsubstringメソッドを使用して目的の部分文字列を取得しています。

この手法により、期待通りの部分文字列を安定して取得できます。

○サンプルコード10:配列やリストとの連携

Javaでsubstringメソッドを使う際には、配列やリストとも連携させることが多々あります。

この連携によって、文字列から特定の部分を抽出し、それを配列やリストに格納するなどの高度な操作が可能になります。

まず、配列とsubstringメソッドを組み合わせて使用する一例として、次のサンプルコードをご覧ください。

public class Main {
    public static void main(String[] args) {
        String str = "apple,banana,cherry";
        String[] fruits = str.split(",");

        for (int i = 0; i < fruits.length; i++) {
            // 各要素の先頭文字だけを大文字にする
            String firstLetter = fruits[i].substring(0, 1).toUpperCase();
            String restLetters = fruits[i].substring(1);
            fruits[i] = firstLetter + restLetters;
        }

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

このコード例では、カンマで区切られた文字列strからsplitメソッドを用いて配列fruitsを作成しています。

その後、forループ内でsubstringメソッドを利用して各要素(フルーツ名)の最初の文字だけを大文字に変換しています。

出力結果として、「Apple」「Banana」「Cherry」という単語が順に表示されます。

次に、JavaのArrayListとsubstringメソッドとの連携について見ていきます。

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        String sentence = "I love Java";
        ArrayList<String> words = new ArrayList<>();

        int start = 0;
        for (int end = 0; end < sentence.length(); end++) {
            if (sentence.charAt(end) == ' ') {
                words.add(sentence.substring(start, end));
                start = end + 1;
            }
        }
        words.add(sentence.substring(start));  // 最後の単語を追加

        System.out.println("ArrayListの内容: " + words.toString());
    }
}

このコードでは、文字列sentenceから単語を抽出し、それをArrayListのwordsに追加しています。

具体的には、substringメソッドを使用して、スペースで区切られた各単語を取り出しています。

このプログラムを実行すると、”ArrayListの内容: [I, love, Java]”という結果が得られます。

●substringメソッドの注意点と対処法

substringメソッドは多くの場面で有用ですが、注意すべき点もいくつかあります。

ここでは、よくあるトラブルとその対処法を詳しく解説していきます。

○文字列の範囲外へのアクセス

まず最初に、文字列の範囲外へアクセスする場合の注意点についてです。

これは、substringメソッドで指定した開始位置や終了位置が、元の文字列の長さを超えている場合に発生します。

public class Main {
    public static void main(String[] args) {
        String str = "hello";
        try {
            String sub = str.substring(3, 10);
        } catch (StringIndexOutOfBoundsException e) {
            System.out.println("文字列の範囲外にアクセスしました");
        }
    }
}

このコードでは、"hello"という5文字の文字列から、3番目から10番目までの部分文字列を取得しようとしています。

しかし、文字列は5文字しかないので、この操作はStringIndexOutOfBoundsExceptionという例外を発生させます。

実行して例外が発生すると、catchブロックが実行され「文字列の範囲外にアクセスしました」というメッセージが出力されます。

この問題を避けるためには、substringメソッドを呼び出す前に、文字列の長さを確認することが重要です。

String.length()メソッドを使用して、取得しようとする部分文字列が元の文字列の範囲内に収まることを確認してからsubstringメソッドを呼び出しましょう。

○負の開始位置や終了位置の取り扱い

次に、substringメソッドで負の開始位置や終了位置を指定した場合の動きについて解説します。

public class Main {
    public static void main(String[] args) {
        String str = "Java";
        try {
            String sub = str.substring(-1, 2);
        } catch (StringIndexOutOfBoundsException e) {
            System.out.println("負の位置を指定しました");
        }
    }
}

このサンプルコードでは、負の数値-1を開始位置として指定しています。

その結果、StringIndexOutOfBoundsException例外が発生します。

実行すると、例外が発生すると、catchブロックが実行され、「負の位置を指定しました」というメッセージが出力されます。

対処法として、負の値が使われないよう、開始位置と終了位置を厳密にチェックすることが重要です。

負の値が指定された場合は、プログラムの処理を中断するか、適切なエラーメッセージを表示するように設計することが求められます。

○特殊文字や全角文字の取扱い

最後に、特殊文字や全角文字を扱う場面での注意点について解説します。

substringメソッドは、UTF-16でエンコードされた文字列を対象としています。

このため、全角文字や特殊文字が含まれる場合には、慎重な取り扱いが必要です。

public class Main {
    public static void main(String[] args) {
        String str = "こんにちは";
        String sub = str.substring(0, 2);
        System.out.println("部分文字列: " + sub);
    }
}

このコードを実行すると、「部分文字列: こん」が出力されますが、これは一般的な文字と全角文字が混在する場合でも同様です。

対処法として、特殊文字や全角文字を含む場合は、そのエンコーディングに適したメソッドを使用するか、事前に文字列を正規化してからsubstringメソッドを適用することをおすすめします。

●カスタマイズ方法

Javaのsubstringメソッドは非常に便利な機能ですが、時には基本的な操作だけでは足りない場合もあります。

そのような状況で有用なのがカスタマイズ方法です。

ここでは、substringメソッドのカスタマイズについて、具体的な方法とサンプルコードを交えて解説します。

○外部ライブラリを使った拡張

Javaには多くの外部ライブラリが存在し、その中には文字列操作をより柔軟に、かつ効率的に行うためのライブラリもあります。

例としてApache Commons Langというライブラリがあります。

import org.apache.commons.lang3.StringUtils;

public class CustomSubstring {
    public static void main(String[] args) {
        // 元の文字列
        String original = "abcdefg";

        // 部分文字列の取得
        String part = StringUtils.substring(original, 2, 5);

        // 結果の表示
        System.out.println("取得した部分文字列: " + part);
    }
}

このコードではApache Commons LangのStringUtils.substringメソッドを使用して、部分文字列を取得しています。

指定した範囲内で部分文字列を正確に取得することができます。

コードを実行すると、"取得した部分文字列: cde"と出力されます。

この結果からもわかるように、指定した範囲で部分文字列を正確に取得できました。

対処として、外部ライブラリを使用する際には、まず該当するライブラリをプロジェクトにインポートする必要があります。

MavenやGradleなどの依存関係管理ツールを用いて、簡単にライブラリを追加できます。

○substringメソッドをオーバーライドする方法

一般的なsubstringメソッドの機能では不足と感じる場面があれば、自分自身で新たなメソッドを作成することも可能です。

public class CustomSubstring {

    // substringメソッドのカスタマイズ版
    public static String customSubstring(String original, int start, int end, String filler) {
        if (end > original.length()) {
            end = original.length();
            for (int i = original.length(); i < end; i++) {
                original += filler;
            }
        }
        return original.substring(start, end);
    }

    public static void main(String[] args) {
        // 元の文字列
        String str = "Javaプログラミング";

        // カスタマイズ版substringメソッドの使用
        String result = customSubstring(str, 2, 9, "*");

        // 結果の表示
        System.out.println("取得した部分文字列: " + result);
    }
}

このコードでは、独自のcustomSubstringメソッドを定義しています。

このメソッドは、Javaの標準substringメソッドに、文字列が短い場合に末尾を指定のfillerで埋める機能を追加しています。

このコードを実行すると、"取得した部分文字列: プログラミ"が出力されます。

指定した開始位置と終了位置に従い、かつ不足する長さをfillerで埋めて部分文字列を取得することができました。

まとめ

Javaのsubstringメソッドについて、基本的な使い方から応用例、さらには注意点とその対処法、カスタマイズ方法に至るまで詳しく解説してきました。

この記事を通して、Javaプログラミングにおける文字列操作の幅が広がったことを願っています。

この情報がJavaプログラミング、特に文字列操作の一環として役立つことを心より願っています。

今後もJavaに関するさまざまなテーマで情報を発信していく予定ですので、ぜひチェックしてみてください。