CharSequenceJavaをに変換するにはどうすればよいStringですか?
6 に答える
そのメソッドを呼び出すことによってtoString()。
このシーケンスの文字をこのシーケンスと同じ順序で含む文字列を返します。文字列の長さは、このシーケンスの長さになります。
ここにはちょっとした落とし穴がある微妙な問題があります。
このtoString()メソッドには、に基本実装がありObjectます。CharSequenceインターフェイスです。メソッドはそのインターフェイスの一部として表示されますが、コンパイル時に、メソッドをオーバーライドして、メソッドのjavadocがメソッドに課すtoString()追加の制約を尊重するように強制するものはありません。つまり、によって返される順序で文字を含む文字列を返す必要があります。CharSequence toString()toString()charAt()
あなたのIDEは、おそらくオーバーライドする必要があることを思い出させることによってあなたを助けることさえしませんtoString()。たとえば、intellijでは、これは新しいCharSequence実装を作成した場合に表示されるものです:http: //puu.sh/2w1RJ。がないことに注意してくださいtoString()。
toString()任意のものに依存している場合、実装者が適切に仕事をしていればCharSequence、それは機能するはずです。CharSequenceただし、不確実性を完全に回避したい場合は、次のようにaStringBuilderとを使用する必要があります。append()
final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
String.valueOf()を直接使用できます
String.valueOf(charSequence)
これは、実際にtoStringを呼び出す前にtoString()nullチェックを実行するのと同じですが。charSequence
これは、メソッドがacharSequenceまたはnullvalueのいずれかを返すことができる場合に役立ちます。
最も安全な方法
String string = String.valueOf(charSequence);
深く掘り下げましょう
をに変換しようとする一般的な方法は3つありCharSequenceますString。
- 型キャスト:
String string = (String) charSequence; - 呼び出し
toString():String string = charSequence.toString(); String.valueOf()方法:String string = String.valueOf(charSequence);
そして、これらを実行するCharSequence charSequence = "a simple string";と、3つすべてが期待される結果を生成します。
問題は、の性質がわからない場合に発生しCharSequenceます。実際、はCharSequence、、、interfaceなどの他のいくつかのクラスが実装するものです。したがって、aからaへの変換は簡単な代入操作であり、キャストなどは必要ありません。しかし、反対のアップキャスティングについては、それは真実ではありません。StringCharBufferStringBufferStringCharSequence
CharSequenceが実際にのオブジェクトであることが確実な場合Stringにのみ、オプション1-型キャストを使用できます。それ以外の場合は、を取得しClassCastExceptionます。この場合、オプション2と3は安全です。
一方、オプション2の場合、CharSequenceをnull呼び出すとtoString()、が得られますNullPointerException。
内部的には、メソッドはチェックを行った後にString.valueOf()メソッドを呼び出します。だから、それは最も安全な方法です。JavaDoc:toString()null
引数がnullの場合、「null」に等しい文字列。それ以外の場合は、obj.toString()の値が返されます。
注意してください:もしそうなら、メソッドCharSequenceは値ではなく文字列を返します。nullString.valueOf()"null"null
CharSequenceの配列を変換する場合は、これを行うだけで、String[]変数に格納することもできます。
CharSequence[] textMsgs = (CharSequence[])sbm.getNotification().extras.get(Notification.EXTRA_TEXT_LINES);
if (textMsgs != null) {
for (CharSequence msg : textMsgs) {
Log.e("Msg", msg.toString());
}
}
また、Stringbuilderを解除することもできます。
new StringBuilder(charSequence).toString();