1. 問題の説明
説明: 日々コードを書いていると、文字列の区切り文字の外側のデータを取得するためにデータを分析して抽出する必要に遭遇することがよくありますが、その際に取り上げる必要があるのが分割メソッドです。
2. 手法の紹介
区切り文字には、任意の文字、記号、数字、文字列などを使用できます。
2.1 分割(文字列正規表現)
2.1.1 単一の区切り文字
public class Test {
public static void main(String[] args) {
String str="2018,text,今天";
//单个分隔符用引号括起来即可
String[] data = str.split(",");
for(int i=0;i< data.length;i++){
System.out.println(data[i]);
}
}
}
上記のコードの出力は次のとおりです
区切り文字自体が「|」の場合、効果を得るにはエスケープ文字「\」を使用する必要があります。そうでない場合、結果は逆になります。
public class Test {
public static void main(String[] args) {
String str="a|bc|8";
//java中\\表示一个普通\,\+特殊字符表示字符本身
String[] data = str.split("\\|");
for(int i=0;i< data.length;i++){
System.out.println(data[i]);
}
}
}
逆に、直接使用すると逆の効果があり、 文字列内の 1 文字が出力されます。次のように:
public class Test {
public static void main(String[] args) {
String str="a|bc|8";
//java中\\表示一个普通\,\+特殊字符表示字符本身
String[] data = str.split("|");
for(int i=0;i< data.length;i++){
System.out.println(data[i]);
}
}
}
2.1.2 複数のセパレータ
public class Test {
public static void main(String[] args) {
String str="2021年11月18日;英语,数学,语文;";
//多个分隔符用引号括起来,并且用“|”进行分割
String[] data = str.split(",|;");
for(int i=0;i< data.length;i++){
System.out.println(data[i]);
}
}
}
2.1.2 区切り文字を表す正規表現
正規表現では、「\d+」は 1 つ以上の数字を表し、数字、文字、その他の文字の集合から構成される文字列から数字以外の文字または文字列を取得するために使用されます。
public class Test {
public static void main(String[] args) {
String str="2018年11月18日abcd85gg688";
//正则表达式中\d+表示一个或多个数字,java中\\表示一个普通\
String[] data = str.split("\\d+");
for(int i=0;i< data.length;i++){
System.out.println(data[i]);
}
}
}
上記のコードの出力は次のとおりです
2.1.2 特別な状況
- 文字列の先頭には区切り文字があります。先頭は空の文字列を生成し、残りは通常の文字列になります。
- 区切り文字は隣り合っています。区切り文字が 2 つごとに空の文字列が生成され、区切り文字が 3 つあるとそれぞれ 2 つの空文字が生成されます。
- 文字列の末尾には区切り文字があります。末尾には空の文字列が生成され、残りは通常どおりです。
2.2 分割(文字列正規表現、整数制限)
- 制限 > 0 の場合、最大で n - 1 回 (左から右へ) に分割され、配列の長さは n を超えず、最後の空の文字列は破棄されません。
- limit < 0 の場合、一致する数だけ分割され、配列の長さは任意です。後続の空の文字列は破棄されません。
- limit = 0 の場合、一致する数だけ分割され、配列の長さは任意であり、末尾の空の文字列は破棄されます。
つまり、split メソッドを使用する場合、正規表現を 1 つだけ入力すると、末尾の空の文字列は破棄されます。