233

CharSequenceJavaをに変換するにはどうすればよいStringですか?

4

6 に答える 6

375

そのメソッドを呼び出すことによってtoString()

このシーケンスの文字をこのシーケンスと同じ順序で含む文字列を返します。文字列の長さは、このシーケンスの長さになります。

于 2011-10-10T00:38:05.510 に答える
93

ここにはちょっとした落とし穴がある微妙な問題があります。

この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();
于 2013-04-08T02:40:12.543 に答える
29

String.valueOf()を直接使用できます

String.valueOf(charSequence)

これは、実際にtoStringを呼び出す前にtoString()nullチェックを実行するのと同じですが。charSequence

これは、メソッドがacharSequenceまたはnullvalueのいずれかを返すことができる場合に役立ちます。

于 2017-12-27T11:59:35.883 に答える
1

最も安全な方法

String string = String.valueOf(charSequence);

深く掘り下げましょう

をに変換しようとする一般的な方法は3つありCharSequenceますString

  1. 型キャストString string = (String) charSequence;
  2. 呼び出しtoString()String string = charSequence.toString();
  3. 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の場合、CharSequencenull呼び出すとtoString()、が得られますNullPointerException

内部的には、メソッドはチェックを行った後にString.valueOf()メソッドを呼び出します。だから、それは最も安全な方法です。JavaDoctoString()null

引数がnullの場合、「null」に等しい文字列。それ以外の場合は、obj.toString()の値が返されます。


注意してください:もしそうなら、メソッドCharSequence値ではなく文字列を返します。nullString.valueOf()"null"null

于 2021-11-05T04:49:42.303 に答える
1

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());
   }
}
于 2022-01-06T19:43:13.270 に答える
0

また、Stringbuilderを解除することもできます。

new StringBuilder(charSequence).toString();
于 2021-11-05T06:14:18.120 に答える