Làm cách nào để chuyển đổi Chuỗi thành CharSequence?


265

Làm thế nào để chuyển đổi Stringsang CharSequencetrong Java?


16
Câu hỏi là loại không nhạy cảm. Chuyển đổi một chuỗi thành một CharSequence giống như chuyển đổi một cây sáo thành một nhạc cụ. Một chuỗi đã là một CharSequence. Lớp String thực hiện giao diện CharSequence.
Jeff Scott Brown

3
Sự nhầm lẫn của OP có thể xuất phát từ việc không biết ý nghĩa của việc lập trình với giao diện
Raedwald

9
@JeffScottBrown câu hỏi thực sự có ý nghĩa, đó là một thắc mắc chính đáng cho bất cứ ai đọc qua tài liệu Android hoặc Java và thiếu chi tiết rằng CharSequence không phải là một lớp. Nhận xét của bạn đã giúp tôi, nhưng nếu câu hỏi không được diễn đạt như vậy, tôi sẽ không tìm thấy nó và đã dành nhiều thời gian hơn để tìm câu trả lời hơn là thực sự có giá trị;)
Kheldar

Tôi đã đến câu hỏi này trong bối cảnh của một vấn đề hấp dẫn: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye

Dưới đây là lời khuyên của tôi nhạc cụ vì một cây sáo IS-Một nhạc cụ "
Vighnesh

Câu trả lời:


261

Kể từ String IS-A CharSequence , bạn có thể vượt qua Stringbất cứ nơi nào bạn cần CharSequencehoặc gán a Stringcho CharSequence:

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

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

Nếu bạn muốn chuyển đổi a CharSequencethành a String, chỉ cần sử dụng toStringphương thức phải được thực hiện bởi mọi triển khai cụ thể CharSequence.

Hy vọng nó giúp.


13
Ngoại trừ việc bạn không thể chỉ định CharSequencemột Stringmà không có diễn viên rõ ràng.
gustafc

1
Đã sửa ví dụ, cảm ơn. Ý tôi là cách khác, nghĩa là gán a Stringcho a CharSequence.
João Silva

4
Bạn nói đúng. Nó thực sự là một giao diện. Tuy nhiên, mã đó không khởi tạo a CharSequence. Nó chỉ đơn giản gán một thể hiện của Stringmột CharSequencebiến và vì Stringthực hiện CharSequencegiao diện, mã hoạt động.
João Silva

5
Đây không phải là câu trả lời. Câu hỏi là Chuỗi -> đến -> CharSequence. Trả lời là ngược lại.
trante

3
Điều này trả lời cả hai. Poster đầu tiên giải quyết vấn đề Chuỗi -> CharSequence bằng cách giải thích rằng Chuỗi là CharSequence. Sau đó, poster trả lời làm thế nào để đi từ CharSequence sang String.
Alex A.

62

Câu trả lời thẳng thắn:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequencelà một giao diện và Stringlớp thực hiện CharSequence.


13

CharSequence là một giao diện và String là một trong những triển khai khác ngoài StringBuilder, StringBuffer và nhiều giao diện khác.

Vì vậy, chỉ cần bạn sử dụng InterfaceName i = new ItsImplementation(), bạn có thể sử dụng CharSequence cs = new String("string")hoặc đơn giản làCharSequence cs = "string";


3

Bạn có thể dùng

CharSequence[] cs = String[] {"String to CharSequence"};

8
Chào mừng bạn đến với Stack Overflow Lucas. Vui lòng cung cấp giải thích nhiều hơn một đoạn mã. Nó có thể rõ ràng đối với chúng tôi, nhưng giúp những người khác cho họ biết lý do tại sao mã này trả lời câu hỏi.
Jean-Rémy Revy

Việc gói một chuỗi thành một mảng không giúp tạo ra một điểm rằng Chuỗi là CharSequence (và do đó mảng CharSequence là mảng của Chuỗi).
tishma

1
CharSequence [] cs = new CharSequence [] {"Chuỗi thành CharSequence"};
avez raj

1

Cố gắng cung cấp một số bối cảnh (có thể) cho câu hỏi của OP bằng cách đăng tải rắc rối của riêng tôi. Tôi đang làm việc trong Scala, nhưng các thông báo lỗi Tôi nhận được tất cả các loại Java tham chiếu và thông báo lỗi đọc rất nhiều như trình biên dịch phàn nàn rằng CharSequence không phải là Chuỗi. Tôi đã xác nhận trong mã nguồn rằng String thực hiện giao diện CharSequence, nhưng thông báo lỗi thu hút sự chú ý đến sự khác biệt giữa String và CharSequence trong khi ẩn nguồn gốc của sự cố:

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)

Tôi đã có thể khắc phục vấn đề này với việc nhận ra rằng vấn đề không phải là String / CharSequence, mà là sự không phù hợp giữa java.lang.Iterable và Iterable tích hợp sẵn của Scala.

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

Vấn đề cụ thể của tôi cũng có thể được giải quyết thông qua các câu trả lời tại Scala: tham gia một chuỗi lặp

Tóm lại, OP và những người khác gặp phải vấn đề tương tự nên phân tích các thông báo lỗi rất chặt chẽ và xem những chuyển đổi loại nào khác có thể liên quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.