Javaで特定の文字列(固定文字シーケンス)を区切りに文字列を分割する方法
Stringクラスのsplit()メソッドは、引数として渡された区切り文字列をもとに、現在の文字列をより小さな文字列へ分割し、その結果を配列として返します。もし対象の文字列の中に指定した区切り文字列が含まれていない場合は、元の文字列そのものを1つの要素とする配列が返されます。
たとえば、半角スペース「 」を区切り文字としてこのメソッドに渡すと、スペースとスペースの間にある単語がひとつのトークンとして認識され、現在の文字列内の各単語(スペースで囲まれた部分)が配列として返されます。
一方、文字列に指定した区切り文字列が存在しない場合、このメソッドは文字列全体を唯一の要素とする配列を返します。エラーにはならないため、区切り文字列の有無を事前にチェックせずに安全に呼び出せる点も覚えておくと便利です。
固定の文字列を区切りにして文字列を分割する手順
特定の文字列が出現するたびに文字列を配列へ分割したい場合は、次の手順に従います。
- 元となる文字列を読み込む。
- split()メソッドを呼び出し、区切り文字列として目的の文字列を渡す。
- 結果として得られた配列を出力する。
サンプルコード
次のJavaプログラムは、テキストファイルの内容を読み込んで1つの文字列にまとめ、split()メソッドを使って「 to 」という文字列を区切りとして分割する例です。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class SplitExample {
public static void main(String args[]) throws FileNotFoundException {
Scanner sc = new Scanner(new File("D:\\sample.txt"));
StringBuilder sb = new StringBuilder();
String input = new String();
while (sc.hasNextLine()) {
input = sc.nextLine();
sb.append(input);
}
String source = sb.toString();
String result[] = source.split(" to ");
System.out.print(Arrays.toString(result));
}
}
実行結果
[Tutorials Point originated from the idea that there exists a class of readers who respond better, on-line content and prefer, learn new skills at their own pace from the comforts of their drawing rooms.]
注意点:split()の引数は正規表現として扱われる
split()メソッドの引数は正規表現として解釈されます。そのため、「.」や「*」など正規表現で特別な意味を持つ文字をそのまま区切り文字列に指定すると、意図しない結果になることがあります。このような文字をリテラルとして扱いたい場合は、Pattern.quote()を使ってエスケープするのが確実です。
String result[] = source.split(java.util.regex.Pattern.quote("."));
また、サンプルコードでは文字列連結にStringBuilderを使用しています。マルチスレッド環境でない限り、従来のStringBufferよりもオーバーヘッドの少ないStringBuilderを選ぶのが現代のJavaでは一般的なベストプラクティスです。
-
JavaのStringクラスsubstring()メソッドの使い方を徹底解説
substring()メソッドは、元の文字列の開始インデックス(beginIndex)から終了インデックス(endIndex)までの部分に対応するString型の値を返します。終了インデックスが指定されていない場合は、文字列の末尾までが切り出しの対象となります。Javaの文字列は0番目の位置からインデックスが始まるという点に注意しましょう。 構文 public String substring(int beginIndex) public String substring(int beginIndex, int endIndex) beginIndex: 部分文字列の切り出しを開始する位置を示
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare