受講料が最大70%OFF 受講料が最大70%OFF

本記事では、Javaのsplitメソッドの使い方について解説します。

splitメソッドは文字を分割する

splitは、対象の文字列を指定した区切り文字で分割し、分割した文字を配列の要素として格納するメソッドです。

引数に単純な文字(列)を指定した場合は、文字に一致した位置で文字列を分割します。

splitメソッドの使い方

splitメソッドの使い方は次の通りです。

String型の変数.split("区切り文字", 分割の回数);

第一引数に指定する区切り文字は、正規表現で指定します。

正規表現とは、「ある特定の文字列パターンを1つの形式で表現する方法」のことを指します。

詳しくは以下の記事で解説していますので「正規表現って何だろう?」という方はチェックしてみてください。

【関連記事】

▶︎苦手意識を克服しよう!Java正規表現の基本を初心者向けに解説!

ポテパンダの一言メモ

splitメソッドでは、よく「,(カンマ)」や特定の文字列を指定して使うことが多いです。

また、第二引数に分割の回数を指定できます。回数指定が必要なければ省略も可能です。

第二引数を省略した場合、配列の要素数は制限されず、配列の終わりに空の文字列がある場合は破棄されます。

第二引数に指定した分割回数が0よりも大きい場合、配列に格納される要素数は指定した引数の値以下になります。

0よりも小さい(負の数)場合、列の要素数は制限されず、配列の終わりに空の文字列がある場合は破棄されません。

また、第二引数に0を指定した場合は、省略した場合の動きと同様になります。

splitメソッドの区切り文字を指定する

では実際に、splitメソッドの区切り文字を指定して文字列を分割してみましょう。

  1. ,(カンマ)で分割
  2. .(ドット)で分割
  3. 改行コードで分割
  4. タブで分割で分割
  5. 空白で分割で分割

,(カンマ)で分割

区切り文字に「,」を指定した場合の記述例・実行例です。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan,style,media";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split(",");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan,style,media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

.(ドット)で分割

区切り文字に「.」を指定した場合の記述例・実行例です。

「.」で分割を行う場合、引数に「.」を指定してもうまく分割できません。

「.」は正規表現で「任意の一文字」を意味するためです。つまり、「.」を文字の「.」として扱っていないんですね。

そこで、少し工夫を凝らして Patternクラスの quoteメソッド を使用します。

quoteメソッドは、指定されたStringのリテラル・パターンStringを返すメソッドです。

これによって「.」を文字として認識し、期待した動作で文字を区切れます。

■記述例
import java.util.regex.Pattern;

public class Main {
  public static void main(String args[]){
    String str = "potepan.style.media";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split(Pattern.quote("."));
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan.style.media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

改行コードで分割

区切り文字に改行コード「\n」を指定した場合の記述例・実行例です。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan\nstyle\nmedia";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split("\n");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan
style
media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

タブで分割で分割

区切り文字にタブ「\t」を指定した場合の記述例・実行例です。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan\tstyle\tmedia";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split("\t");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan	style	media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

空白で分割で分割

区切り文字に空白を指定した場合の記述例・実行例です。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan style media";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split(" ");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan style media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

splitメソッドで複数の区切り文字を指定する方法

前章で、指定した区切り文字で文字列を分割する方法を紹介しました。

ここでは、少し応用して複数の区切り文字を指定する方法を見ていきましょう。

区切り文字を複数するには、第一引数の区切り文字を「[](ブラケット)」で囲います。

記述例は次の通りです。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "address=style,potepan,com";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split("[=,]");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}

ここでは、addressを意味する「=」と、それぞれの単語を区切っている「,」の2つを区切り文字に指定しました。

実行結果は次の通りです。

■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: address=style,potepan,com
区切られた文字: address
区切られた文字: style
区切られた文字: potepan
区切られた文字: com

splitメソッドで空文字を指定して1文字ずつ分割する方法

splitメソッドの引数に空文字を指定すると、文字列を1文字ずつ分割可能です。

ポテパンダの一言メモ

空白「” “」ではなく、空文字「””」である点はしっかり覚えておきましょう。

記述例・実行例は次の通りです。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "style.potepan.com";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split("");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: style.potepan.com
区切られた文字: s
区切られた文字: t
区切られた文字: y
区切られた文字: l
区切られた文字: e
区切られた文字: .
区切られた文字: p
区切られた文字: o
区切られた文字: t
区切られた文字: e
区切られた文字: p
区切られた文字: a
区切られた文字: n
区切られた文字: .
区切られた文字: c
区切られた文字: o
区切られた文字: m

このように、1文字ずつ分割できているのがわかります。

splitメソッドで末尾の空文字は除外しない方法

splitメソッドの第二引数を指定しない場合、末尾の空文字は除外されます。

末尾の空文字も除外せずに文字列を分割したい場合は、第二引数にマイナスの値を設定しましょう。

実際に、第二引数に0を指定した場合(省略した場合)と、-1を指定した場合を比較してみます。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "style,potepan,com,,";
    System.out.println("区切る前の文字列: " + str);
    System.out.println();
    String[] words = str.split(",", 0);
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
    System.out.println("配列のサイズ:" + words.length);
    System.out.println();
    words = str.split(",", -1);
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
    System.out.println("配列のサイズ:" + words.length);
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: style,potepan,com,,

区切られた文字: style
区切られた文字: potepan
区切られた文字: com
配列のサイズ:3

区切られた文字: style
区切られた文字: potepan
区切られた文字: com
区切られた文字:
区切られた文字:
配列のサイズ:5
ポテパンダの一言メモ

このように、マイナスの値を指定すると空文字も含めた区切りが実現でき、配列のサイズも変わってきます。

状況に合わせて区切りを使いこなせるようにしてください。

splitで分割した文字をArrayListで取得する方法

splitメソッドで文字列を分割し、結果をArrayListで取得するは、asListメソッドを使って変換しましょう。

asListメソッドは、配列をリスト(コレクション)に変換するためのメソッドです。

サンプルコードで動きを確認しましょう。

■記述例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
  public static void main(String args[]){
    String str = "style,potepan,com";
    System.out.println("区切る前の文字列: " + str);
    List<String> words = new ArrayList<String>(Arrays.asList(str.split(",")));
    System.out.println("ArrayListに格納した文字: " + words);
    System.out.println("ArrayListに格納した1文字目: " + words.get(0));
    System.out.println("ArrayListに格納した2文字目: " + words.get(1));
    System.out.println("ArrayListに格納した3文字目: " + words.get(2));
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: style,potepan,com
ArrayListに格納した文字: [style, potepan, com]
ArrayListに格納した1文字目: style
ArrayListに格納した2文字目: potepan
ArrayListに格納した3文字目: com

このように、分割した文字をArrayListに格納し、取得までできました。

なお、ArrayListについて詳しく知りたい場合は、以下の記事を参考にしてみてください!

【関連記事】

▶︎【Java入門】ArrayListの使い方!配列との違いも解説

splitで複数の空白を含む文字列を分割する方法

区切りたい文字列の中に空白が複数ある場合、先述した方法で分割すると次のようになってしまいます。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan   style  media";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split(" ");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan style media
区切られた文字: potepan
区切られた文字:
区切られた文字:
区切られた文字: style
区切られた文字:
区切られた文字: media

複数の空白を一つの区切り文字として指定する場合、正規表現で「” +”」と指定しましょう。

ポテパンダの一言メモ

「+」を追加することで、直前の文字が1回以上繰り返す場合にマッチします。

■記述例
public class Main {
  public static void main(String args[]){
    String str = "potepan   style  media";
    System.out.println("区切る前の文字列: " + str);
    String[] words = str.split(" +");
    for (String word : words) {
        System.out.println("区切られた文字: " + word);
    }
  }
}
■実行結果
mbp:desktop potepan$ java Main
区切る前の文字列: potepan style media
区切られた文字: potepan
区切られた文字: style
区切られた文字: media

これで期待した通りの動きになりました。

splitで文字列がnullの場合に気をつけること

splitメソッドは、対象の文字列がnullだった場合、例外処理 NullPointerException が発生します。

そのため、nullが含まれる可能性がある場合、try-catch文で例外処理を実装するか、nullチェックをすると良いでしょう。

次のように記述できます。

■記述例①
public class Main {
  public static void main(String args[]){
    String str = null;
    System.out.println("区切る前の文字列: " + str);
    if(str != null) {
      String[] words = str.split(" +");
      for (String word : words) {
          System.out.println("区切られた文字: " + word);
      }
    } else {
      System.out.println("str は null です");
    }
  }
}
■実行結果①
mbp:desktop potepan$ java Main
区切る前の文字列: null
str は null です
■記述例②
public class Main {
  public static void main(String args[]){
    String str = null;
    System.out.println("区切る前の文字列: " + str);
    try{
      if(str != null) {
        String[] words = str.split(" +");
        for (String word : words) {
            System.out.println("区切られた文字: " + word);
        }
      } else {
        System.out.println("str は null です");
        throw new NullPointerException();
      }
    } catch(NullPointerException e) {
      e.printStackTrace();
    }
  }
}

■実行結果②
mbp:desktop potepan$ java Main
区切る前の文字列: null
str は null です
java.lang.NullPointerException
at Main.main(Main.java:14)

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。