倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Java と XML と空白と (2) : 正規表現

前回java.lang.Character クラスの static メソッドを用いて、Java での空白文字を見ました。 このとき

  • Character#isSpaceChar()
  • Character#isWhitespace()

という2つのメソッドを使って空白文字かどうかを判定していました。

哀しいかな Java には他の空白の定義があります。 それは正規表現です(他にもあるかも知れませんが)。 パッケージとしては java.util.regex です。 java.util.regex.Pattern クラスの JavaDoc を見ると、(正規表現での)空白文字にマッチするパターンは「\s」で表され*1、これは

[ \t\n\x0B\f\r]

と同じです。 つまり、正規表現での空白文字は「' ', '\t', '\n', '\x0B', '\f', '\r'」の6つだということです。 各文字をもう少し詳しく見ると下表のようになります:

名前 文字リテラル (Java) Unicode 文字 (Java)
スペース (Space) ' ' \u0020
水平タブ (HT) '\t' \u0009
改行 (LF) '\n' \u000a
垂直タブ (VT) '\u000b \u000b
フォームフィード (FF) '\f' \u000c
復帰キャリッジ・リターン (CR) '\r' \u000d


ちなみに、これらは全て Character#isWhitespace() で指定される空白文字に含まれ、XML の空白文字を含みます。 雰囲気で包含関係を書き下すと以下のようになります:

{XML の空白} ⊂ {Java 正規表現の空白} ⊂ {Java Character#isWhitespace() の空白}

*1:ちなみに Character#isWhitespace() メソッドで指定される空白文字に一致するパターンは「\p{javaWhitespace}」で表すことが出来ます。