วิธีการแปลงสตริงเป็น CharSequence


265

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


16
คำถามนี้เป็นคำถามที่ไม่เกี่ยวกับประสาทสัมผัส การแปลงสตริงเป็น CharSequence เปรียบเสมือนการแปลงฟลุตเป็นเครื่องดนตรี สตริงอยู่แล้วเป็น CharSequence คลาส String ใช้ CharSequence อินเตอร์เฟส
Jeff Scott Brown

3
ความสับสนของ OP อาจเกิดจากการไม่รู้ว่าการโปรแกรมไปยังส่วนต่อประสาน
Raedwald

9
@JeffScott คำถามที่ทำให้เข้าใจจริงแล้วมันเป็นเรื่องน่าประหลาดใจที่ทุกคนที่อ่านผ่าน Android หรือ Java doc และขาดรายละเอียดที่ CharSequence ไม่ใช่คลาส ความคิดเห็นของคุณช่วยฉัน แต่ถ้าคำถามไม่ได้รับการพูดในแบบที่เป็นฉันจะไม่ได้พบมันและใช้เวลาในการหาคำตอบมากกว่าที่คุ้มค่าจริงๆ)
Kheldar

ฉันมาถึงคำถามนี้ในบริบทของปัญหาแรง: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye

นี่คือวิธีที่ฉันจะแนะนำ @JeffScottBrown เพื่อแสดงความคิดเห็นของเขาใหม่ - "คลาส String ดำเนินการ (IS-A) อินเทอร์เฟซ CharSequence เพื่อให้คุณสามารถส่งผ่านสตริงแทน CharSequence เหมือนวิธีที่คุณสามารถอ้างถึงขลุ่ยเป็น เครื่องดนตรีเพราะขลุ่ย IS-A เครื่องดนตรี "
Vighnesh

คำตอบ:


261

ตั้งแต่String IS-A CharSequenceคุณสามารถส่งผ่านStringทุกที่ที่คุณต้องการCharSequenceหรือมอบหมายStringa CharSequence:

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

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

หากคุณต้องการที่จะแปลงCharSequenceไปเป็นStringเพียงแค่ใช้วิธีการที่จะต้องดำเนินการโดยทุกการดำเนินการที่เป็นรูปธรรมของtoStringCharSequence

หวังว่ามันจะช่วย


13
ยกเว้นว่าคุณไม่สามารถกำหนดให้CharSequenceกับStringโดยไม่ต้องมีนักแสดงที่ชัดเจน
gustafc

1
แก้ไขตัวอย่างขอบคุณ ฉันหมายถึงวิธีอื่น ๆ เช่นการกำหนดให้เป็นString CharSequence
João Silva

4
คุณถูก. มันเป็นอินเตอร์เฟส CharSequenceแต่รหัสที่ไม่ได้ instantiate มันเพียงกำหนดอินสแตนซ์ของStringให้กับCharSequenceตัวแปรและเนื่องจากStringใช้CharSequenceอินเทอร์เฟซรหัสจึงทำงานได้
João Silva

5
นี่ไม่ใช่คำตอบ คำถามคือสตริง -> ถึง -> CharSequence คำตอบคือสิ่งที่ตรงกันข้าม
trante

3
คำตอบนี้ทั้งคู่ ผู้โพสต์แก้ไขปัญหา String -> CharSequence เป็นครั้งแรกโดยการอธิบายว่า String IS เป็น CharSequence จากนั้นโปสเตอร์จะตอบว่าจะไปจาก CharSequence ไปยัง String ได้อย่างไร
Alex A.

62

คำตอบตรง:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequenceเป็นอินเตอร์เฟซและการดำเนินการระดับStringCharSequence


13

CharSequence เป็นอินเทอร์เฟซและสตริงเป็นหนึ่งในการใช้งานอื่น ๆ นอกเหนือจาก StringBuilder, StringBuffer และอื่น ๆ อีกมากมาย

ดังนั้นเช่นเดียวกับที่คุณใช้InterfaceName i = new ItsImplementation()คุณสามารถใช้CharSequence cs = new String("string")หรือเพียงแค่CharSequence cs = "string";


3

คุณสามารถใช้ได้

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

8
ยินดีต้อนรับสู่ Stack Overflow Lucas โปรดระบุคำอธิบายมากกว่าตัวอย่างโค้ด อาจชัดเจนสำหรับเรา แต่ช่วยให้ผู้อื่นแจ้งให้พวกเขาทราบว่าทำไมรหัสนี้ตอบคำถาม
Jean-Rémy Revy

การตัดสตริงลงในอาร์เรย์ไม่ช่วยในการระบุว่า String เป็น CharSequence (และด้วยเหตุนี้อาร์เรย์ของ CharSequence จึงเป็นอาร์เรย์ของ String)
tishma

1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
avez raj

1

พยายามระบุบริบท (ที่เป็นไปได้) สำหรับคำถามของ OP ด้วยการโพสต์ปัญหาของฉันเอง ฉันทำงานใน Scala แต่ข้อความแสดงข้อผิดพลาดฉันได้รับการอ้างอิง Java ทุกประเภทและข้อความแสดงข้อผิดพลาดอ่านมากเช่นคอมไพเลอร์บ่นว่า CharSequence ไม่ใช่สตริง ฉันยืนยันในซอร์สโค้ดที่ String ใช้อินเทอร์เฟซ CharSequence แต่ข้อความแสดงข้อผิดพลาดดึงความสนใจไปที่ความแตกต่างระหว่าง String และ CharSequence ขณะซ่อนแหล่งที่แท้จริงของปัญหา:

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)

ฉันสามารถแก้ไขปัญหานี้ได้ด้วยการตระหนักว่าปัญหาไม่ใช่ String / CharSequence แต่เป็นความไม่ตรงกันระหว่าง java.lang.Iterable และ Scala ในตัวของ Iterable

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

ปัญหาเฉพาะของฉันสามารถแก้ไขได้ด้วยคำตอบที่Scala: เข้าร่วมสตริงที่ซ้ำได้

โดยสรุป OP และคนอื่น ๆ ที่พบปัญหาที่คล้ายกันควรแยกวิเคราะห์ข้อความแสดงข้อผิดพลาดอย่างใกล้ชิดและดูว่ามีการแปลงประเภทใดที่เกี่ยวข้อง

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