Bagaimana cara mengubah sebuah String menjadi CharSequence?

265

Bagaimana cara mengonversi Stringke CharSequencedalam Java?

Daksh Gargas
sumber
16
Pertanyaannya agak tidak masuk akal. Konversi String ke CharSequence seperti mengubah seruling ke alat musik. A String sudah merupakan CharSequence. Kelas String mengimplementasikan antarmuka CharSequence.
Jeff Scott Brown
3
Kebingungan OP mungkin berasal dari tidak mengetahui apa artinya memprogram ke antarmuka
Raedwald
9
@JeffScottBrown pertanyaan itu sebenarnya masuk akal, itu adalah keajaiban yang sah bagi siapa pun yang membaca dokumen Android atau Java dan melewatkan detail bahwa CharSequence bukan kelas. Komentar Anda membantu saya, tetapi jika pertanyaannya tidak seperti apa adanya, saya tidak akan menemukannya dan menghabiskan lebih banyak waktu untuk mencari jawaban daripada yang benar-benar bernilai;)
Kheldar
Saya sampai pada pertanyaan ini dalam konteks Masalah asyik: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye
Begini cara saya menyarankan @JeffScottBrown untuk menulis ulang komentarnya- "Kelas String mengimplementasikan (IS-A) antarmuka CharSequence sehingga Anda dapat meneruskan sebuah String sebagai ganti CharSequence. Ini seperti bagaimana Anda dapat merujuk ke seruling sebagai sebuah alat musik karena alat musik seruling IS-A "
Vighnesh

Jawaban:

261

Sejak String IS-A CharSequence , Anda dapat melewati a di Stringmana pun Anda membutuhkan CharSequence, atau menetapkan a Stringke CharSequence:

CharSequence cs = "string";
String s = cs.toString();
foo(s); // prints "string"

public void foo(CharSequence cs) { 
  System.out.println(cs);
}

Jika Anda ingin mengonversi a CharSequencemenjadi String, gunakan saja toStringmetode yang harus diterapkan oleh setiap implementasi konkret dari CharSequence.

Semoga ini bisa membantu.

João Silva
sumber
13
Kecuali bahwa Anda tidak dapat menetapkan a CharSequenceke Stringtanpa pemeran eksplisit.
gustafc
1
Memperbaiki contohnya, terima kasih. Maksud saya sebaliknya, yaitu, menetapkan a Stringke CharSequence.
João Silva
4
Anda benar. Ini memang sebuah antarmuka. Namun, kode itu tidak instantiate a CharSequence. Ini hanya memberikan contoh Stringke CharSequencevariabel, dan karena Stringmengimplementasikan CharSequenceantarmuka, kode tersebut berfungsi.
João Silva
5
Ini bukan jawabannya. Pertanyaannya adalah String -> ke -> CharSequence. Jawabannya terbalik.
trante
3
Ini menjawab keduanya. Poster terlebih dahulu menyelesaikan masalah String -> CharSequence dengan menjelaskan bahwa String ADALAH CharSequence. Kemudian poster menjawab bagaimana cara beralih dari CharSequence ke String.
Alex A.
62

Jawaban langsung:

String s = "Hello World!";

// String => CharSequence conversion:

CharSequence cs = s;  // String is already a CharSequence

CharSequenceadalah antarmuka, dan Stringmengimplementasikan kelas CharSequence.

icza
sumber
13

CharSequence adalah antarmuka dan String adalah salah satu implementasinya selain StringBuilder, StringBuffer dan banyak lainnya.

Jadi, sama seperti yang Anda gunakan InterfaceName i = new ItsImplementation(), Anda bisa menggunakan CharSequence cs = new String("string")atau hanyaCharSequence cs = "string";

krmanish007
sumber
3

Kamu bisa memakai

CharSequence[] cs = String[] {"String to CharSequence"};
Lucas Fialho
sumber
8
Selamat datang di Stack Overflow Lucas. Berikan lebih banyak penjelasan daripada cuplikan kode. Mungkin jelas bagi kami, tetapi bantu orang lain memberi tahu mereka mengapa kode ini menjawab pertanyaan.
Jean-Rémy Revy
Membungkus string ke dalam array tidak membantu menunjukkan bahwa String adalah CharSequence (dan karenanya array CharSequence adalah array dari String).
tishma
1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
avez raj
1

Mencoba memberikan beberapa (mungkin) konteks untuk pertanyaan OP dengan memposting masalah saya sendiri. Saya bekerja di Scala, tetapi pesan kesalahan saya mendapatkan semua jenis referensi Java, dan pesan kesalahan banyak dibaca seperti kompiler mengeluh bahwa CharSequence bukan String. Saya mengkonfirmasi dalam kode sumber bahwa String mengimplementasikan antarmuka CharSequence, tetapi pesan kesalahan menarik perhatian pada perbedaan antara String dan CharSequence sambil menyembunyikan sumber sebenarnya dari masalah:

scala> cols
res8: Iterable[String] = List(Item, a, b)

scala> val header = String.join(",", cols)
<console>:13: error: overloaded method value join with alternatives:
  (x$1: CharSequence,x$2: java.lang.Iterable[_ <: CharSequence])String <and>
  (x$1: CharSequence,x$2: CharSequence*)String
 cannot be applied to (String, Iterable[String])
       val header = String.join(",", cols)

Saya bisa memperbaiki masalah ini dengan kesadaran bahwa masalahnya bukan String / CharSequence, melainkan ketidakcocokan antara java.lang.Iterable dan Scala's built-in Iterable.

scala> val header = String.join(",", coll: _*)
header: String = Item,a,b

Masalah khusus saya juga dapat diselesaikan melalui jawaban di Scala: bergabung dengan iterable of string

Singkatnya, OP dan orang lain yang menemukan masalah serupa harus menguraikan pesan kesalahan dengan sangat cermat dan melihat konversi jenis apa yang mungkin terlibat.

Sarah Messer
sumber