Java 文字列のsplit()メソッドの例
⚡ スマートサマリー
文字列を分割する Java split() メソッドを使用すると、区切り文字が一致する箇所でテキストを分割し、分割された部分を文字列配列として返します。オプションの limit 引数で、生成される分割数に上限を設定でき、残りの部分はそのまま保持されます。

split()文字列とは何か Java?
その split() メソッドを使用すると、 string 特定の Java 文字列の区切り文字。多くの場合、区切り文字はスペースまたはカンマ(,)で、文字列を分割したい位置を指定します。
split() 関数の構文
public String[] split(String regex) public String[] split(String regex, int limit)
⚠️ 戻り値の型に関する注意: split() を返す String[] 配列、一つもない String結果をプレーンテキストに割り当てます String 変数がコンパイルに失敗し、型が互換性がないというエラーが発生します。これは、このメソッドを使用する初心者が最もよく犯す間違いです。
- 正規表現: テキストまたは文字列に適用される正規表現。
- 制限: 結果として得られる配列に含まれる値の最大数。省略した場合、または0の場合は、正規表現に一致するすべての部分文字列が返されます。
文字列を分割する方法 Java 区切り文字付き
以下の例は、文字列を分割する方法を示しています。 Java 区切り文字付き。
という名前の文字列変数があるとします。 strMain アルファ、ベータ、ガンマ、 Delta、シグマ — すべてコンマ (,) で区切られます。
ここで、すべての個別の文字列が必要な場合、考えられる最良のパターンは、カンマに基づいて文字列を分割することです。 したがって、次のように XNUMX つの個別の文字列を取得します。
- アルファ
- ベータ
- ガンマ
- Delta
- シグマ
文字列を使用する split 方法 Java 分割する必要のある文字列に対して、区切り文字を引数として指定します。
この中の Java 区切り文字で文字列を分割します。区切り文字はカンマ(,)で、 Java 文字列をコンマ操作で分割すると、配列が分割されます。
class StrSplit{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit = strMain.split(", ");
for (int i=0; i < arrSplit.length; i++)
{
System.out.println(arrSplit[i]);
}
}
}
コード内のループは、それぞれを印刷するだけです Java 配列からsplit関数の後に文字列を分割します Java以下に示すように。
期待される出力:
Alpha Beta Delta Gamma Sigma
例: Java 正規表現と長さを使った文字列のsplit()メソッド
分割関数の後の最初の「n」個の要素のみが必要な状況を考えてみましょう。 Javaただし、文字列の残りの部分はそのままにしておきたい。出力は次のようになる。
- アルファ
- ベータ
- Delta、ガンマ、シグマ
これは、split() 操作に別の引数を渡すことで実現できます。 Javaそして、それが必要な文字列の上限となります。
split メソッドの以下のコードを検討してください。 Java:
class StrSplit2{
public static void main(String []args){
String strMain = "Alpha, Beta, Delta, Gamma, Sigma";
String[] arrSplit_2 = strMain.split(", ", 3);
for (int i=0; i < arrSplit_2.length; i++){
System.out.println(arrSplit_2[i]);
}
}
}
期待される出力:
Alpha Beta Delta, Gamma, Sigma
制限値を3に設定すると、要素が正確に3つ生成されることに注意してください。最初の2つの区切り文字は尊重され、2番目の区切り文字以降のすべてが3番目の要素としてまとめられます。
文字列を分割する方法 Java スペース
文字列をスペースで分割したい場合を考えてみましょう。ここに分割された文字列があります。 Java 変数 命名 strMain いくつかの単語で構成されています。 ようこそ! Guru99.
public class StrSplit3{
public static void main(String args[]){
String strMain = "Welcome to Guru99";
String[] arrSplit_3 = strMain.split("\\s");
for (int i=0; i < arrSplit_3.length; i++){
System.out.println(arrSplit_3[i]);
}
}
}
期待される出力:
Welcome to Guru99
パターン \\s 単一の空白文字に一致します。 \\s+ 単語が複数のスペースで区切られる場合のみ、そうでない場合は余分なスペースごとに空の要素が生成されます。
分割時に空の文字列を保持する方法 Java
行動の一つ split() 初めて出会ったほとんどの人を驚かせる:余計な空文字列は静かに捨て去られる。 "a,b,," カンマで区切ると、4 個ではなく 2 個の要素が返されます。これは、デフォルトの制限がゼロであるため、配列の末尾にある空のフィールドがすべて破棄されるためです。
これは、データが位置情報を持つ場合に特に重要になります。例えば、CSVファイルの行では、末尾の欠損値があっても列が占有されます。これらの空白が削除されると、下流のすべてのインデックスがずれてしまいます。
通過する 負 制限によってそれらを維持する:
String row = "Alpha,Beta,,"; // Default: trailing empty fields removed -> length 2 String[] a = row.split(","); System.out.println(a.length); // prints 2 // Negative limit: every field preserved -> length 4 String[] b = row.split(",", -1); System.out.println(b.length); // prints 4
3つのルールはすべてのケースを網羅しています。 ゼロ(デフォルト)は、パターンを可能な限り多く適用し、その後末尾の空文字列を削除します。 正の limit はパターンを最大で limit マイナス 1 回適用するため、最後の要素には変更されていない残りの値が格納されます。これは、limit が 3 の場合の前の例では示したとおりです。 負 limit は、パターンを可能な限り多く適用し、末尾のフィールドも含め、すべての空のフィールドを保持します。
先頭の空文字列は、また異なる動作をします: 分割 ",a,b" 制限に関係なく、常に最初の要素が空になります。これは、パターンが位置0で一致するためです。これを防ぐには、入力をトリミングするか、結果をフィルタリングしてください。 配列 使用前に。
split()、StringTokenizer、Pattern.split():どれを使うべきか
Java 文字列を分割する方法は3つあります。それぞれ異なるのは、受け入れる区切り文字の種類、戻り値、そしてパターンが一度コンパイルされるか、呼び出しごとに再コンパイルされるかという点です。ループ内で分割が行われる場合、この点が重要になります。
| 側面 | String.split() | 文字列トークナイザー | パターン.split() |
|---|---|---|---|
| デリミタ | 正規表現 | 単一文字のセット | 正規表現 |
| 返品 | String [] | 列挙によるトークン | String [] |
| パターンコンパイル済み | すべての通話で | 適用されない | 一度使用した後、再利用 |
| 空き地を維持する | 負の制限のみ | 期限なし | 負の制限のみ |
| ステータス | おすすめ | 互換性のために残されたレガシー | ループ再生を推奨 |
String.split() 通常の単発作業には、最も短く記述でき、読みやすいので、これを使用します。 Pattern.compile(",").split(text) ループ内で分割する場合、正規表現は各イテレーションごとではなく、一度だけコンパイルされるため、避けてください。 StringTokenizer 新しいコードでは、これは後方互換性のためにのみ残されています。
コマンドと Java split() のエラーとその修正方法
ほぼすべての問題 split() trac原因は2つ考えられます。引数がリテラル文字列ではなく正規表現である場合、または上記の制限ルールによってフィールドが予期せず破棄されている場合です。以下の各エラーには、その症状と解決策が示されています。
- ドットで分割すると、空の配列が返されます。
"1.2.3".split(".")ドットは正規表現のワイルドカードなので、すべての文字に一致します。エスケープして次のようにします。split("\\."). - パイプの分割動作が奇妙な挙動を示す: パイプは正規表現における交替を意味します。エスケープするには、
split("\\|"). - 互換性のない型エラー: 結果は
String変数を次のように宣言します。String[]. - 予期しない最初の要素が空です。 区切り文字が入力文字列の先頭に現れます。まず文字列をトリミングしてください。
- 末尾の欠損値: 末尾の空のフィールドは、デフォルトの制限により破棄されました。
-1XNUMX 番目の引数として。 - NullPointerException:
split()null参照に対してメソッドが呼び出されました。分割する前にnullチェックを行ってください。このメソッドはnullを処理できません。

