1. 3 要素の CSV を逆順に並べ替える
  2. 区切り文字を含まない 1 要素の文字列はそのまま返る
  3. 空文字列は空文字列のまま返る
  4. 4 要素の数値 CSV を逆順に並べ替える
  5. 2 要素の CSV を逆順に並べ替える
コース一覧
Java 中級:コレクション・Stream・例外処理
split と join

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

split と join

CSV の列ズレ

split(".") が、なぜか空の配列を返す

外から渡ってくるデータの多くは、カンマ区切りやスラッシュ区切りといった「区切り文字でつながった 1 本の文字列」です。これをばらすのが String.split、ばらしたものを 1 本に戻すのが String.join です。

ところが、ファイル名を拡張子で分けようとした最初の 1 行でつまずきます。

Java

String path = "app.config.json"; String[] bad = path.split("."); System.out.println(bad.length); // 0 String[] good = path.split("\\."); System.out.println(good.length); // 3

例外は出ません。長さ 0 の配列が黙って返ってきて、後ろの処理が空回りするだけです。

区切り文字は、正規表現として読まれている

split の引数は、ただの文字ではなく 正規表現 として解釈されます。正規表現の . は「任意の 1 文字」なので、split(".") は「どの文字も区切り文字」という意味になります。全部が区切りなので、残る中身が 1 つもなく、結果は空の配列です。

文字としてのドットで分けたいなら、\\. と書いて打ち消します。同じことが | ? * + ( ) [ ] { } ^ $ にも当てはまります。

Java

String[] parts = "red|green|blue".split("\\|"); System.out.println(String.join(" / ", parts)); // red / green / blue

打ち消しが面倒なときは Pattern.quote("|") を通すと、中身を文字どおりに扱ってくれます。なお , や - は正規表現でも特別な意味を持たないので、そのまま渡して構いません。

String.join の方に正規表現の話はありません。第 1 引数の文字列を、要素と要素の間にそのまま挟むだけです。配列でも List でも受け取れて、末尾に余計な区切りが残らないので、自分でループを回して最後の 1 文字を削るような処理は要りません。同じ道具に見えて片方だけ正規表現、というのが混乱しやすいところです。

空の入力と、末尾の空白は数え方が違う

もう 1 つ、split の戻り値には直感に反する決まりが 2 つあります。

Java

System.out.println("".split(",").length); // 1 System.out.println("a,b,,".split(",").length); // 2

空文字列を分けると、空配列ではなく空文字列 1 個が入った配列が返ります。そして末尾に続く空の要素は捨てられるので、"a,b,," は 4 要素ではなく 2 要素になります。列数を厳密に揃えたい場面では split(",", -1) と第 2 引数に負の数を渡すと、末尾の空要素も残ります。

解説

区切り文字の周りに空白が混ざった入力はよくあります。split した直後に各要素を trim しておくと、雑な入力でも安定します。

課題では、カンマで分けて中身を並べ替え、またカンマでつなぎ直します。カンマは打ち消しの要らない文字なのでそこは素直に書けますが、空文字列を渡されたときに何が返るかは、上の決まりを思い出して先に確かめておいてください。

要件

  1. csv.split(",") を使って文字列を , で分割すること
  2. 分割した配列を逆順に並べ替えてから String.join(",", ...) でつなぎ直すこと
  3. csv が空文字列 "" のときは空文字列をそのまま返すこと

入出力例

swapJoin("a,b,c") → "c,b,a" swapJoin("hello") → "hello" swapJoin("") → "" swapJoin("1,2,3,4") → "4,3,2,1" swapJoin("foo,bar") → "bar,foo"

ヒント

`String.split` の戻り値は `String[]` です。`for` ループで `i = parts.length - 1` から `0` に向かって回せば逆順に詰め直せます

`String.join` は第 1 引数に区切り文字、第 2 引数に配列または `List` を取ります。`String.join(",", reversed)` のように呼び出します

空文字列を `split` すると要素 1 個の配列 `[""]` が返るので、最初に `csv.isEmpty()` で分岐して空文字列を返すのが安全です

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 文字列操作 まとめクイズ

    中級「文字列操作」章で学んだ `String.format` / `StringBuilder` / 正規表現 / `split` / `join` の使い分けを 4 択で総ざらいする章末まとめ。

  • LocalDate で日付を扱う

    Java 8 で導入された java.time.LocalDate を使って、日付の生成・加減算・整形を学び、年月日から ISO 形式の文字列を返すコードを書いてみよう。

  • Files でファイルに書き込む

    Java の標準ライブラリ `java.nio.file.Files` を使って、ファイルへの書き込みと読み込みをわずか数行で実現する方法を学ぼう。

  • extends で継承する

    Java の `extends` キーワードを使った継承の基本を学び、`Animal` を継承した `Dog` クラスを作って `Dog.bark()` の結果を返すコードを書いてみよう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 配列サイズ固定の同型データの集まり
  • 処理計算や代入を表す長方形
  • 引数位置引数=順番で渡す。
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 戻り値呼び出し元への返答を表す点線矢印
main.java
学習モード
エディタを読み込んでいます

メモ

split と join

⌘S で保存