วิธีการแปลง CharSequence เป็น String?


คำตอบ:


339

โดยการเรียกใช้toString()วิธีการ

ส่งคืนสตริงที่มีอักขระตามลำดับนี้ในลำดับเดียวกันกับลำดับนี้ ความยาวของสตริงจะเป็นความยาวของลำดับนี้


@TheOnlyAnil โทรsetText(CharSequence)ไม่ได้ทำในสิ่งที่คุณต้องการ?
Mike Samuel

ฉันต้องการตั้งชื่อให้ actionBar สามารถคลิกได้
TheOnlyAnil

@TheOnlyAnil บางทีคุณควรถามคำถามนั้น ความคิดเห็นเกี่ยวกับคำตอบของคำถามที่เกี่ยวข้องกันไม่ได้เป็นสถานที่ที่ดีในการลองและหยอกล้อข้อกำหนดของคุณ
Mike Samuel

Stackoverflow จะไม่ให้ฉันโพสต์คำถามใด ๆ : / btw ฉันทำเมื่อคืนนี้ actionbar กำหนดเองเป็นวิธีการแก้ :)
TheOnlyAnil

1
@ WillByers ที่เอาท์พุทดูเหมือน toString ของอาร์เรย์ CharSequence ไม่ใช่ CharSequence
Mike Samuel

90

มีปัญหาเล็กน้อยที่นี่ที่เป็นบิตของ gotcha

วิธีการดำเนินงานที่มีฐานในtoString() เป็นอินเทอร์เฟซ และแม้ว่าวิธีการจะปรากฏเป็นส่วนหนึ่งของอินเทอร์เฟซนั้นไม่มีอะไรในเวลารวบรวมที่จะบังคับให้คุณแทนที่มันและเคารพข้อ จำกัด เพิ่มเติมที่javadoc ของวิธีการวางไว้บนวิธีการนั้น คือว่ามันควรจะกลับสตริงที่มีตัวอักษรในการสั่งซื้อส่งกลับโดยObjectCharSequencetoString()CharSequence toString()toString()charAt()

IDE ของคุณจะไม่ได้ช่วยให้คุณออกโดยเตือนว่าคุณว่าคุณอาจจะtoString()แทนที่ ยกตัวอย่างเช่นใน IntelliJ นี้เป็นสิ่งที่คุณจะเห็นถ้าคุณสร้างใหม่CharSequenceการดำเนินงาน: http://puu.sh/2w1RJ toString()หมายเหตุกรณีที่ไม่มี

หากคุณเชื่อมั่นtoString()ในตัวเองCharSequenceมันควรจะทำงานหากผู้CharSequenceดำเนินการทำงานอย่างถูกต้อง แต่ถ้าคุณต้องการหลีกเลี่ยงความไม่แน่นอนใด ๆ คุณควรใช้ a StringBuilderและappend()ดังนี้:

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

9
คุณไม่ควรทำผิดพลาด / ทำให้รหัสของคุณแย่ลงเพราะคนอื่นอาจทำผิดพลาด
Lodewijk

9
ส่งคืน StringBuilder ใหม่ (charSequence) .toString (); เทียบเท่าซับเดียว
GáborLipták

22
คำตอบนี้เป็นความผิดCharSequenceอินเตอร์เฟซที่ชัดเจนกำหนดtoString()- The implementorจะไม่ได้พลาดนี้ Javadocฯ "ส่งกลับสตริงที่มีตัวละครในลำดับนี้ในลำดับเดียวกับลำดับนี้. ความยาวของเชือกจะเป็นความยาวของลำดับนี้" ตั้งแต่เริ่มก่อตั้งใน1.4 ผู้คนโปรดยืนยันสิ่งที่คุณ
โหวต

2
นี่มันโง่ หากคุณไม่ไว้วางใจผู้ดำเนินการให้ปฏิบัติตามสัญญาการเดิมพันทั้งหมดจะปิด การผ่านเป็นพารามิเตอร์เพื่อStringBuilderอาจล้มเหลวในการทำสิ่งที่คุณคาดหวัง เช่นเดียวกับอินเทอร์เฟซอื่น ๆ เช่นListหรือSetโดยเฉพาะอย่างยิ่งequals()และhashCode()วิธีการที่จะรวบรวมโดยไม่มีการแทนที่ แต่จะต้องถูกแทนที่ตามสัญญา
shmosel

3
ข้อเท็จจริงที่ว่าอินเทอร์เฟซทำสิ่งนี้เป็นการตัดสินใจที่ไม่ดีในเรื่องนั้นและคำตอบของฉันก็เน้นว่านี่เป็นเรื่องง่ายกว่าสถานที่ปกติสำหรับข้อผิดพลาดของมนุษย์ที่จะเกิดขึ้น
Fragorl

19

คุณสามารถใช้ String.valueOf () โดยตรง

String.valueOf(charSequence)

แม้ว่านี่จะเหมือนกับtoString()การตรวจสอบค่า null charSequenceก่อนที่จะเรียก toString

สิ่งนี้มีประโยชน์เมื่อเมธอดสามารถส่งคืน a charSequenceหรือnullค่า


8
อันที่จริงวันนี้ฉันแค่กัด ถ้าcharSequenceเป็นโมฆะแล้วสตริงกลับจะเป็นและไม่ได้"null" null
ChrisThomas

โอ้ มีเหตุผล. ฉันจะลบคำตอบนี้
Abhishek Batra

1
ฉันคิดว่านี่เหมาะสำหรับบางกรณี
Shukant Pal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.