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)
何の問題もありませんでした。空文字列が作成されます。
何の問題もありませんでした。byte配列はShiftJISエンコーディングであるとして解釈されます。
何の問題もありませんでした。byte配列はShiftJISエンコーディングであるとして解釈され、指定されたオフセットから指定された長さの部分文字列が作成されます。
使用できません。try〜catchに対応していないため、 java.io.UnsupportedEncodingException を拾えず、コンパイルに失敗します。
何の問題もありませんでした。char配列はそのままUNICODEとして解釈されます。
何の問題もありませんでした。char配列はそのままUNICODEとして解釈され、指定されたオフセットから指定された長さの部分文字列が作成されます。
何の問題もありませんでした。valueと同一の文字列表現をもつ別のStringが生成されます。equalsはtrueを返しますが、==は偽になります。
対応していません。コンパイルは通りますが、実機では動作しない旨の警告文が出力されます。
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()