jigletでのStringクラス


jigletで使用可能なStringクラスは、一般的なStringクラスとはちょっと違います。
公式サイト(jiglet.jp)によると、以下のメソッドが非対応となっています。

regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
regionMatches(int toffset, String other, int ooffset, int len)
toCharArray()
toString()
toLowerCase()
toUpperCase()
trim()
valueOf(boolean b)
valueOf(char c)
valueOf(char[] data)
valueOf(char[] data, int off, int len)
valueOf(int i)
valueOf(long l)
valueOf(Object obj)

はたして、本当にこれだけなのでしょうか。
ちょっと検証してみたいと思います。


コンストラクタ

CLDCにおけるStringクラスには、以下のコンストラクタが存在します。

 String()
 String(byte[] bytes)
 String(byte[] bytes, int off, int len)
 String(byte[] bytes, int off, int len, String enc)
 String(byte[] bytes, String enc)
 String(char[] value)
 String(char[] value, int offset, int count)
 String(String value)
 String(StringBuffer buffer)
ひとつづつ検証してみます。

String()

何の問題もありませんでした。空文字列が作成されます。

String(byte[] bytes)

何の問題もありませんでした。byte配列はShiftJISエンコーディングであるとして解釈されます。

String(byte[] bytes, int off, int len)

何の問題もありませんでした。byte配列はShiftJISエンコーディングであるとして解釈され、指定されたオフセットから指定された長さの部分文字列が作成されます。

String(byte[] bytes, int off, int len, String enc)

String(byte[] bytes, String enc)

使用できません。try〜catchに対応していないため、 java.io.UnsupportedEncodingException を拾えず、コンパイルに失敗します。

String(char[] value)

何の問題もありませんでした。char配列はそのままUNICODEとして解釈されます。

String(char[] value, int offset, int count)

何の問題もありませんでした。char配列はそのままUNICODEとして解釈され、指定されたオフセットから指定された長さの部分文字列が作成されます。

String(String value)

何の問題もありませんでした。valueと同一の文字列表現をもつ別のStringが生成されます。equalsはtrueを返しますが、==は偽になります。

String(StringBuffer buffer)

対応していません。コンパイルは通りますが、実機では動作しない旨の警告文が出力されます。
StringBufferからStringへ変換する場合は、StringBuffer.toString()を使用するしかないようです。


メソッド

メソッドはあまりに数が多いため、対応、非対応、使用不能を一覧にするだけにとどめておきます。
非対応とは、コンパイルは通るものの実機では動作不能と言われるもののことです。
使用不能とは、前述のString(byte[] bytes, String enc)のように、コンパイルすら通らないものをさします。

対応 charAt(int index)
compareTo(String anotherString)
concat(String str)
endsWith(String suffix)
equals(Object anObject)
getBytes()
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
length()
replace(char oldChar, char newChar)
startsWith(String prefix)
startsWith(String prefix, int toffset)
substring(int beginIndex)
substring(int beginIndex, int endIndex)
trim() *
非対応 hashCode()
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
toCharArray()
toLowerCase()
toString()
toUpperCase()
valueOf(boolean b)
valueOf(char c)
valueOf(char[] data)
valueOf(char[] data, int offset, int count)
valueOf(int i)
valueOf(long l)
valueOf(Object obj)
使用不能 getBytes(String enc)

さて、この中で、ドキュメントとの相違があるのは以下のメソッドです。

メソッド使用不能の記載コンパイルエラー実機動作不可の警告
getBytes(String enc)
hashCode()
trim()

このうち、 getBytes(String enc) に関しては、try〜catchの問題なので除外します。となると、残る不思議はふたつです。
しかし、hashCode()についてはjiglet生成の段階で止められるため、実機での検証は不能。
すると、ここで検証可能なのは trim() のみとなります。
では、早速検証してみます。

public class test extends jp.jig.jiglet.Jiglet {
    public void paint(boolean allDrawFlag) {}
    
    public void main() {
        showDialog("[" + ("   hello!   ".trim()) + "]", DIALOG_TYPE_OK);
    }
}

エミュレータ上では問題なく表示されました。

実機でも実行してみました。

どうやら、問題なさそうです。


結論

jigletのStringクラスで使用可能と確認できたメソッドは以下の通りです。

コンストラクタ

String()
String(byte[] bytes)
String(byte[] bytes, int off, int len)
String(char[] value)
String(char[] value, int offset, int count)
String(String value)

メソッド

charAt(int index)
compareTo(String anotherString)
concat(String str)
endsWith(String suffix)
equals(Object anObject)
getBytes()
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
length()
replace(char oldChar, char newChar)
startsWith(String prefix)
startsWith(String prefix, int toffset)
substring(int beginIndex)
substring(int beginIndex, int endIndex)
trim()

tipsへ戻る
トップへ

© 2008 jiglet.info
以上の内容は、jiglet.infoによる独自研究です。
このページの内容についてはjiglet.infoまでお願いします。決してjig.jp社へと問い合わせないよう願います。