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


Câu trả lời:


339

Bằng cách gọi toString()phương thức của nó .

Trả về một chuỗi chứa các ký tự trong chuỗi này theo cùng thứ tự với chuỗi này. Độ dài của chuỗi sẽ là độ dài của chuỗi này.


@TheOnlyAnil, gọi điện setText(CharSequence)không làm những gì bạn cần?
Mike Samuel

Tôi muốn làm cho tiêu đề actionBar có thể nhấp.
TheOnlyAnil 04/05/2015

@TheOnlyAnil, có lẽ bạn nên hỏi nó như một câu hỏi. Nhận xét về một câu trả lời cho một câu hỏi liên quan không phải là một nơi tốt để thử và trêu chọc các yêu cầu của bạn.
Mike Samuel

Stackoverflow sẽ không cho phép tôi gửi bất kỳ câu hỏi. : / btw tôi đã làm điều đó tối qua. Thanh hành động tùy chỉnh là giải pháp :)
TheOnlyAnil

1
@WillByer mà đầu ra trông giống như toString của một mảng CharSequence, không phải là CharSequence.
Mike Samuel

90

Có một vấn đề tinh tế ở đây là một chút vấn đề.

Các toString()phương pháp có thực hiện căn cứ vào Object. CharSequencelà một giao diện; và mặc dù toString()phương thức xuất hiện như một phần của giao diện đó, nhưng không có gì tại thời gian biên dịch sẽ buộc bạn ghi đè lên nó và tôn trọng các ràng buộc bổ sung mà CharSequence toString()javadoc của phương thức đặt ra cho toString()phương thức; tức là nó sẽ trả về một chuỗi chứa các ký tự theo thứ tự được trả về charAt().

IDE của bạn thậm chí sẽ không giúp bạn bằng cách nhắc nhở bạn rằng bạn có thể nên ghi đè toString(). Ví dụ: trong intellij, đây là những gì bạn sẽ thấy nếu bạn tạo một CharSequencetriển khai mới : http://puu.sh/2w1RJ . Lưu ý sự vắng mặt của toString().

Nếu bạn dựa vào toString()một cách tùy tiện CharSequence, nó sẽ hoạt động với điều kiện người CharSequencethực hiện đã thực hiện đúng công việc của họ. Nhưng nếu bạn muốn tránh mọi sự không chắc chắn hoàn toàn, bạn nên sử dụng một StringBuilderappend(), như vậy:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();

9
Bạn không nên mắc lỗi / làm cho mã của bạn tệ hơn vì những người khác có thể đã mắc lỗi.
Lodewijk

9
trả về StringBuilder mới (charSequence) .toString (); là một lớp lót tương đương.
Gábor Lipták

22
ĐÁP điều này là sai Các CharSequencegiao diện một cách rõ ràng định nghĩa toString()- những người thực hiện sẽ không bỏ lỡ này. Các javadoc bang "Trả về một chuỗi chứa ký tự trong chuỗi này theo thứ tự như trình tự này. Chiều dài của chuỗi sẽ được chiều dài của chuỗi này" kể từ khi ra đời trong 1,4 . Mọi người, vui lòng xác minh những gì bạn upvote
Earcam

2
Điều này thật ngốc nghếch. Nếu bạn không tin tưởng người thực hiện tuân theo hợp đồng, tất cả các cược sẽ bị tắt. Truyền nó như một tham số để StringBuildercó thể không thực hiện được những gì bạn mong đợi. Điều tương tự cũng xảy ra với bất kỳ giao diện nào khác, chẳng hạn như List, hoặc Setcụ thể là các phương thức equals()hashCode()phương thức sẽ biên dịch mà không ghi đè, nhưng phải được ghi đè theo hợp đồng.
shmosel

3
Thực tế là giao diện thực hiện điều này được cho là một quyết định tồi tệ trong vấn đề đó, và câu trả lời của tôi chỉ đơn giản nhấn mạnh rằng đây là một nơi dễ dàng hơn bình thường để xảy ra lỗi của con người.
Fragorl

19

Bạn có thể trực tiếp sử dụng String.valueOf ()

String.valueOf(charSequence)

Mặc dù điều này giống như toString()kiểm tra null charSequencetrước khi thực sự gọi toString.

Điều này hữu ích khi một phương thức có thể trả về a charSequencehoặc nullgiá trị.


8
Điều này thực sự chỉ cắn tôi hôm nay. nếu charSequencelà null thì chuỗi trả về sẽ "null"và không null.
ChrisThomas

Oh. Có ý nghĩa. Tôi sẽ xóa câu trả lời này
Abhishek Batra

1
Tôi nghĩ rằng điều này là hoàn hảo cho một số trường hợp.
Shukant Pal
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.