DATE : 2006/05/09 (Tue)
Java SE 5 以前では、文字列の文字数を数えるために java.lang.String#length() を使っていました。
Java で文字を表す char 型は2バイト幅です。また、文字は UTF-16 として表現されています。上記 length メソッドの javadoc にもあるように、java.langString#length() は純粋に char 型の値の数を求めます。
しかし、 Java SE 5 から、 Unicode 4.0 がサポートされました。Unicode 4.0 では、UTF-32 という文字エンコーディングが制定されました。つまり、Unicode 4.0 では、4バイト幅の文字コードも存在することになります。4バイト幅の文字コードを UTF-16 で表現する場合は、上位2バイトと下位2バイトを別々にして表現します(従来の2バイト幅や1バイト幅の文字コードはそのままです)。
すると、4バイト幅の文字コードは、char 型のデータとしては2つ必要になります。2つの char データで1文字を表すことになるわけです。
そうなると、java.lang.String#length() の結果が狂ってしまいます。純粋に char 型のデータの数を返すので、4バイト幅の文字が1文字からなる文字列では「2」という結果が返ってきます。
そこで、Java SE 5では java.lang.String#codePointCount(int, int) が追加されました。今後、文字数を数える際にはこらちのメソッドを使うとよいかもしれません。
ちなみに、文字列全体の文字数を求めるコードは以下のようになります。
(s は java.io.String の変数)
int length = s.codePointCount(0, s.length());
参考文献
DATE : 2006/05/07 (Sun)
(前回の記事)
参考文献
- java.util.Properties
- java.util.Properties#load(java.io.InputStream) プロパティファイル(プロパティリスト)の仕様が書かれています
- J2SE 5.0 Tiger 虎の穴 Properties
(了)
DATE : 2006/05/05 (Fri)
(前回の記事)
XML 形式のプロパティファイル
Java SE 5 から、 XML 形式で Properties を読み書きできるようになりました。
XML 形式で Properties を書き出すには java.util.Properties#storeToXML(java.io.OutputStream, java.lang.String) を、読み込むには java.util.Properties#loadFromXML(java.io.InputStream) を使います。なお、storeToXML メソッドには、文字エンコーディングを指定して書き出すことのできるメソッドもあります。
XML 形式の Properties の DTD は java.util.Properties の javadoc に掲載されています。
XML 形式の Properties は、次のような構成になります。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <entry key="KEY">VALUE</entry> </properties>
実際にプロパティのキーと要素を表しているのは、次の部分です。
<entry key="KEY">VALUE</entry>
「KEY」がキー、「VALUE」が要素となります。
つまり、entry 要素ひとつを使って、ひとつのプロパティを表すことになります。例えば、キーに「SE」、「EE」、それぞれの要素が「Standard Edition」、「Enterprise Edition」となる Properties を XML で示すと以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="SE">Standard Edition</entry>
<entry key="EE">Enterprise Edition</entry>
</properties>
ちなみに、XML 形式の Properties では、XML の文字エンコードを指定することができます。標準では、上のように UTF-8 となっていますが、 Shift_JIS なども指定できます。
そのため、従来のプロパティファイルのように、日本語を Unicode 形式で書く必要がありません。
(つづきます)
DATE : 2006/05/02 (Tue)
(前回の記事)
コメントを書く
プロパティを記述していると、その用途などをコメントとして残しておきたいことがあります。
プロパティファイルにコメントを書くためには、行頭に「#」か「!」を書きます(行頭にスペースがあっても問題ありません)。すると、その行はコメント行として扱われます。
# コメント
! コメント
key = value
ただしコメントは、プロパティのように「\」を行末に付けて複数行に渡ることはできません。複数行に渡るコメントを書く場合は、それぞれの行頭に必ず「#」か「!」を書く必要があります。
なお、インラインコメントはありません。つまり、プロパティを記述した行と同じ行にコメントを書くことはできません。
# この行はコメントになります
key = value # ここはコメントになりません
ちなみに、プロパティファイルの文字エンコーディングは ISO 8859-1 ですが、コメント行は解析の際に無視されるため、Shift_JIS などの別の文字コードを含んでも問題ありません。
(つづきます)