前回、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}」で表すことが出来ます。