Javaで"//"を区切り文字として文字列を分割する

流れは以下の通り。

  1.  Pattern ptn = Pattern.compile([区切り文字の正規表現]);
  2.  String strs = ptn.split([分割したい文字列]);

Stringクラスにもsplitメソッドがあるのでそっちを使ってもいいと思います。
違いはよく知らん。

で、ちょっとあるファイルの絶対パスをディレクトリの配列にしたいな、と思うことがあった。
例えば
 C:\hoge\hoge1\hoge2\hoge3\hage.txt
だったら、これを
 {C:, hoge, hoge1, hoge2, hoge3, hage.txt}
っていう文字列の配列にしたかったんです。

まぁ"\"で分割すればいいな。と思って以下のようなコードを書いたんです。

  1. String path = "C:\\hoge\\hoge1\\hoge2\\hoge3\\hage.txt";
  2. Pattern ptn = Pattern.compile("\\");
  3. String strs = ptn.split(path);

実行したら怒られました。Patternのcompileメソッドで怒られてるみたいでした。
次のようにすれば通りました。

  1. String path = "C:\\hoge\\hoge1\\hoge2\\hoge3\\hage.txt";
  2. Pattern ptn = Pattern.compile("\\\\");
  3. String strs = ptn.split(path);

compileで正規表現コンパイルするとき、"\\d"とか"\\w"とか"\\"で始まるパターンがあるので、compileの内部的には「"\\"の後に文字ねーじゃねーか!」って怒ってるんだと思います。(調べる気がない)

ちなみにStringのsplitメソッド使う場合もほぼ同じ。

  1. String path = "C:\\hoge\\hoge1\\hoge2\\hoge3\\hage.txt";
  2. String strs = path.split("\\\\");

こっちのほうがPatternオブジェクトいらない分、スリムな気がする。
いったいどう使い分ければいいのかわからない。。。
なんかスッキリしないというか、汚いというか。正規表現を使いこなすのは時間がかかりそうです。

 

参考

Java 検索メモ: String のRegex 正規表現