Bagaimana cara mengubah CharSequence ke String?

205

Bagaimana saya bisa mengkonversi Java CharSequenceke String?

Belgi
sumber

Jawaban:

339

Dengan memohon toString()metodenya.

Mengembalikan string yang berisi karakter dalam urutan ini dalam urutan yang sama dengan urutan ini. Panjang string akan menjadi panjang urutan ini.

Mike Samuel
sumber
@TheOnlyAnil, apakah menelepon setText(CharSequence)tidak melakukan apa yang Anda butuhkan?
Mike Samuel
Saya ingin membuat judul actionBar dapat diklik.
TheOnlyAnil
@TheOnlyAnil, mungkin Anda harus bertanya itu sebagai pertanyaan. Mengomentari jawaban atas pertanyaan terkait tangensial bukan tempat yang baik untuk mencoba dan mencari tahu kebutuhan Anda.
Mike Samuel
Stackoverflow tidak akan membiarkan saya memposting pertanyaan apa pun. : / btw saya melakukan itu tadi malam. Custom actionbar adalah solusinya :)
TheOnlyAnil
1
@WillByers yang outputnya terlihat seperti toString dari array CharSequence, bukan CharSequence.
Mike Samuel
90

Ada masalah halus di sini yang sedikit paham.

The toString()metode memiliki implementasi basis di Object. CharSequenceadalah sebuah antarmuka; dan meskipun toString()metode ini muncul sebagai bagian dari antarmuka itu, tidak ada pada saat kompilasi yang akan memaksa Anda untuk menimpanya dan menghormati batasan tambahan yang CharSequence toString()ditempatkan oleh toString()metode javadoc pada metode tersebut; yaitu bahwa ia harus mengembalikan string yang berisi karakter dalam urutan yang dikembalikan oleh charAt().

IDE Anda bahkan tidak akan membantu Anda dengan mengingatkan bahwa Anda mungkin harus menimpanya toString(). Misalnya, di intellij, ini yang akan Anda lihat jika Anda membuat CharSequenceimplementasi baru : http://puu.sh/2w1RJ . Perhatikan tidak adanyatoString() .

Jika Anda mengandalkan toString()sewenang-wenang CharSequence, itu akan berhasil asalkan CharSequencepelaksana melakukan pekerjaan mereka dengan benar. Tetapi jika Anda ingin menghindari ketidakpastian sama sekali, Anda harus menggunakan a StringBuilderdan append(), seperti:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
fragorl
sumber
9
Anda tidak boleh membuat kesalahan / memperburuk kode Anda karena orang lain mungkin telah melakukan kesalahan.
Lodewijk
9
mengembalikan StringBuilder baru (charSequence) .toString (); adalah ekuivalen liner tunggal.
Gábor Lipták
22
JAWABAN INI SALAH . CharSequenceAntarmuka secara eksplisit menentukan toString()- implementor tidak akan melewatkan ini. The javadoc negara "Mengembalikan sebuah string yang berisi karakter dalam urutan ini dalam urutan yang sama seperti urutan ini. Panjang string akan menjadi panjang urutan ini" sejak awal di 1,4 . Teman-teman, harap verifikasi apa yang Anda
pilih
2
Ini konyol. Jika Anda tidak mempercayai pelaksana untuk mengikuti kontrak, semua taruhan dibatalkan. Melewatkannya sebagai parameter untuk StringBuilderbisa gagal melakukan apa yang Anda harapkan. Hal yang sama berlaku untuk antarmuka lain, seperti Listatau Set, khususnya metode equals()dan hashCode()metode yang akan dikompilasi tanpa penggantian, tetapi harus diganti sesuai dengan kontrak.
shmosel
3
Fakta bahwa antarmuka melakukan ini bisa dibilang keputusan yang buruk dalam hal itu, dan jawaban saya hanya menyoroti bahwa ini adalah tempat yang lebih mudah daripada kesalahan manusia untuk terjadi.
fragorl
19

Anda dapat langsung menggunakan String.valueOf ()

String.valueOf(charSequence)

Meskipun ini sama dengan toString()melakukan pemeriksaan nol pada charSequencesebelum benar-benar memanggil toString.

Ini berguna ketika suatu metode dapat mengembalikan nilai charSequenceatau a null.

Abhishek Batra
sumber
8
Ini sebenarnya hanya menggigitku hari ini. jika charSequencenull maka string yang dikembalikan akan "null"dan tidak null.
ChrisThomas
Oh Masuk akal. Saya akan menghapus jawaban ini
Abhishek Batra
1
Saya pikir ini sempurna untuk beberapa kasus.
Shukant Pal