Wie konvertiere ich einen String in CharSequence?

265

Wie konvertiert man Stringauf CharSequencein Java?

Daksh Gargas
quelle
16
Die Frage ist irgendwie unsinnig. Das Konvertieren einer Saite in eine CharSequence ist wie das Konvertieren einer Flöte in ein Musikinstrument. Ein String ist bereits eine Zeichenfolge. Die String-Klasse implementiert die CharSequence-Schnittstelle.
Jeff Scott Brown
3
Die Verwirrung des OP könnte darauf zurückzuführen sein, dass er nicht weiß, was es bedeutet, auf eine Schnittstelle
Raedwald,
9
@JeffScottBrown die Frage macht tatsächlich Sinn, es ist ein legitimes Wunder für jeden, der das Android- oder Java-Dokument liest und das Detail vermisst, dass CharSequence keine Klasse ist. Ihr Kommentar hat mir geholfen, aber wenn die Frage nicht so formuliert worden wäre, wie sie ist, hätte ich sie nicht gefunden und mehr Zeit damit verbracht, nach einer Antwort zu suchen, als es wirklich wert ist;)
Kheldar
Ich kam zu dieser Frage im Zusammenhang mit einem groovigen Problem: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye
Hier ist, wie ich @JeffScottBrown raten würde, seinen Kommentar neu zu formulieren: "Die String-Klasse implementiert (IS-A) die CharSequence-Schnittstelle, sodass Sie einen String anstelle einer CharSequence übergeben können. Es ist so, als könnten Sie eine Flöte als eine Flöte bezeichnen." Musikinstrument, weil eine Flöte IS-A Musikinstrument "
Vighnesh

Antworten:

261

Da String IS-A CharSequence können Sie einen Pass , Stringwo Sie ein benötigen CharSequence, oder zuordnen Stringzu a CharSequence:

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

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

Wenn Sie einen konvertieren CharSequencezu ein String, sondern nur die Verwendung toStringMethode , die von jeder konkreten Umsetzung umgesetzt werden muß CharSequence.

Ich hoffe es hilft.

João Silva
quelle
13
Außer dass Sie CharSequencea Stringohne explizite Besetzung nicht einem zuweisen können .
Gustafc
1
Das Beispiel wurde behoben, danke. Ich meinte umgekehrt, dh a Stringeinem a zuweisen CharSequence.
João Silva
4
Du hast Recht. Es ist in der Tat eine Schnittstelle. Dieser Code instanziiert jedoch nicht a CharSequence. Es weist einer Variablen einfach eine Instanz von Stringzu CharSequence, und da Stringdie CharSequenceSchnittstelle implementiert wird, funktioniert der Code.
João Silva
5
Dies ist nicht die Antwort. Die Frage lautet String -> to -> CharSequence. Die Antwort ist umgekehrt.
Trante
3
Dies beantwortet beide. Poster löst zunächst trivial das Problem String -> CharSequence, indem erklärt wird, dass ein String eine CharSequence ist. Dann antwortet das Poster, wie man von CharSequence zu String wechselt.
Alex A.
62

Klare Antwort:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequenceist eine Schnittstelle, und die StringKlasse implementiert CharSequence.

icza
quelle
13

CharSequence ist eine Schnittstelle und String ist eine der anderen Implementierungen als StringBuilder, StringBuffer und viele andere.

So, wie Sie verwenden InterfaceName i = new ItsImplementation(), können Sie verwenden CharSequence cs = new String("string")oder einfachCharSequence cs = "string";

krmanish007
quelle
3

Sie können verwenden

CharSequence[] cs = String[] {"String to CharSequence"};
Lucas Fialho
quelle
8
Willkommen bei Stack Overflow Lucas. Bitte geben Sie mehr Erklärungen als ein Code-Snippet. Es mag für uns offensichtlich sein, aber helfen Sie anderen, sie wissen zu lassen, warum dieser Code die Frage beantwortet.
Jean-Rémy Revy
Das Einschließen eines Strings in ein Array hilft nicht, darauf hinzuweisen, dass String eine CharSequence ist (und daher das Array von CharSequence ein Array von String ist).
Tishma
1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
Avez Raj
1

Der Versuch, einen (möglichen) Kontext für die Frage von OP bereitzustellen, indem ich meine eigenen Probleme poste. Ich arbeite in Scala, aber die Fehlermeldungen erhalten alle Referenz-Java-Typen, und die Fehlermeldung liest sich ähnlich wie der Compiler, der sich darüber beschwert, dass CharSequence kein String ist. Ich habe im Quellcode bestätigt, dass String die CharSequence-Schnittstelle implementiert, aber die Fehlermeldung macht auf den Unterschied zwischen String und CharSequence aufmerksam, während die eigentliche Ursache des Problems ausgeblendet wird:

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)

Ich konnte dieses Problem mit der Erkenntnis beheben, dass das Problem nicht String / CharSequence war, sondern eine Nichtübereinstimmung zwischen java.lang.Iterable und Scalas integriertem Iterable.

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

Mein spezielles Problem kann auch über die Antworten bei Scala gelöst werden : Verbinden Sie eine Iterable von Zeichenfolgen

Zusammenfassend sollte OP und andere, die auf ähnliche Probleme stoßen, die Fehlermeldungen sehr genau analysieren und sehen, welche anderen Typkonvertierungen beteiligt sein könnten.

Sarah Messer
quelle