Java 8

『改訂2版 パーフェクトJava』の内容に沿って要点をまとめておく。

文字と文字列

文字列の操作

Stringクラス

split
この文字列を、指定された正規表現に一致する位置で分割します。

入力されたどの部分とも式が一致しない場合、配列は1つの要素(つまり、この文字列)だけを保持します。

package org.tea4miki.string;

public class StringSplit {
  public static void main(String... args) {
    String value = "abc,def,ghi";
    String[] splitArray = value.split("#");

    System.out.println("splitArray.length=" + splitArray.length);
    for (int i = 0; i < splitArray.length; i++) {
      System.out.println("splitArray[" + i + "]=" + splitArray[i]);
    }
  }
}
                    
splitArray.length=1
splitArray[0]=abc,def,ghi
                    

文字列の先頭に一致する部分がある場合は戻り値の配列の先頭に空の文字列が含まれる。

package org.tea4miki.string;

public class StringSplit {
  public static void main(String... args) {
    String value = "abc,def,ghi";
    String[] splitArray = value.split("a");

    System.out.println("splitArray.length=" + splitArray.length);
    for (int i = 0; i < splitArray.length; i++) {
      System.out.println("splitArray[" + i + "]=" + splitArray[i]);
    }
  }
}
                    
splitArray.length=2
splitArray[0]=
splitArray[1]=bc,def,ghi
                    

制限引数に0を指定した場合は後続の空の文字列は結果に含まれない。

package org.tea4miki.string;

public class StringSplit {
  public static void main(String... args) {
    String value = "abc,def,ghi,,j,,";
    String[] splitArray = value.split(",", 0);

    System.out.println("splitArray.length=" + splitArray.length);
    for (int i = 0; i < splitArray.length; i++) {
      System.out.println("splitArray[" + i + "]=" + splitArray[i]);
    }
  }
}
                    
splitArray.length=5
splitArray[0]=abc
splitArray[1]=def
splitArray[2]=ghi
splitArray[3]=
splitArray[4]=j
                    

制限引数を指定することで結果の配列の長さを制限引数以下にすることができる。配列の最後には残りの文字の全てが含まれる。

package org.tea4miki.string;

public class StringSplit {
  public static void main(String... args) {
    String value = "abc,def,ghi,,j,,";
    String[] splitArray = value.split(",", 3);

    System.out.println("splitArray.length=" + splitArray.length);
    for (int i = 0; i < splitArray.length; i++) {
      System.out.println("splitArray[" + i + "]=" + splitArray[i]);
    }
  }
}
                    
splitArray.length=3
splitArray[0]=abc
splitArray[1]=def
splitArray[2]=ghi,,j,,
                    

制限引数に負の値を指定すると後続の空白も含めて結果の配列がつくられる。

package org.tea4miki.string;

public class StringSplit {
  public static void main(String... args) {
    String value = "abc,def,ghi,,j,,";
    String[] splitArray = value.split(",", -1);

    System.out.println("splitArray.length=" + splitArray.length);
    for (int i = 0; i < splitArray.length; i++) {
      System.out.println("splitArray[" + i + "]=" + splitArray[i]);
    }
  }
}
                    
splitArray.length=7
splitArray[0]=abc
splitArray[1]=def
splitArray[2]=ghi
splitArray[3]=
splitArray[4]=j
splitArray[5]=
splitArray[6]=
                    

関連情報

2015, AfternoonTea