CharSequence
Javaをに変換するにはどうすればよい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
またはnull
valueのいずれかを返すことができる場合に役立ちます。
最も安全な方法
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への変換は簡単な代入操作であり、キャストなどは必要ありません。しかし、反対のアップキャスティングについては、それは真実ではありません。String
CharBuffer
StringBuffer
String
CharSequence
CharSequence
が実際にのオブジェクトであることが確実な場合String
にのみ、オプション1-型キャストを使用できます。それ以外の場合は、を取得しClassCastException
ます。この場合、オプション2と3は安全です。
一方、オプション2の場合、CharSequence
をnull
呼び出すとtoString()
、が得られますNullPointerException
。
内部的には、メソッドはチェックを行った後にString.valueOf()
メソッドを呼び出します。だから、それは最も安全な方法です。JavaDoc:toString()
null
引数がnullの場合、「null」に等しい文字列。それ以外の場合は、obj.toString()の値が返されます。
注意してください:もしそうなら、メソッドCharSequence
は値ではなく文字列を返します。null
String.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();