Comment convertir une chaîne en CharSequence?

265

Comment convertir Stringà CharSequenceen Java?

Daksh Gargas
la source
16
La question est en quelque sorte non sensible. Convertir une chaîne en une charséquence, c'est comme convertir une flûte en instrument de musique. Une chaîne est déjà une CharSequence. La classe String implémente l'interface CharSequence.
Jeff Scott Brown
3
La confusion du PO peut provenir de l'ignorance de la programmation sur une interface
Raedwald
9
@JeffScottBrown la question a du sens, c'est une merveille légitime pour quiconque lit le document Android ou Java et manque le détail que CharSequence n'est pas une classe. Votre commentaire m'a aidé, mais si la question n'avait pas été formulée telle quelle, je ne l'aurais pas trouvée et j'ai passé plus de temps à chercher une réponse qu'elle n'en vaut vraiment la peine;)
Kheldar
Je suis venu à cette question dans le contexte d'un problème groovy: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye
Voici comment je conseillerais à @JeffScottBrown de reformuler son commentaire - "La classe String implémente (IS-A) l'interface CharSequence afin que vous puissiez passer une chaîne à la place d'une CharSequence. C'est comme comment vous pourriez vous référer à une flûte comme instrument de musique car une flûte IS-A instrument de musique "
Vighnesh

Réponses:

261

Depuis String IS-A CharSequence , vous pouvez passer un Stringpartout où vous en avez besoin CharSequence, ou affecter un Stringà un CharSequence:

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

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

Si vous voulez convertir un CharSequenceen un String, utilisez simplement la toStringméthode qui doit être implémentée par chaque implémentation concrète de CharSequence.

J'espère que ça aide.

João Silva
la source
13
Sauf que vous ne pouvez pas attribuer un CharSequenceà un Stringsans cast explicite.
Gustafc
1
Correction de l'exemple, merci. Je voulais dire l'inverse, c'est-à-dire affecter un Stringà un CharSequence.
João Silva
4
Vous avez raison. C'est en effet une interface. Cependant, ce code n'instancie pas a CharSequence. Il affecte simplement une instance de Stringà une CharSequencevariable, et depuis Stringimplémente l' CharSequenceinterface, le code fonctionne.
João Silva
5
Ce n'est pas la réponse. La question est String -> to -> CharSequence. La réponse est inversée.
trante
3
Cela répond aux deux. Poster résout d'abord de manière triviale le problème String -> CharSequence en expliquant qu'une chaîne EST une CharSequence. L'affiche explique ensuite comment passer de CharSequence à String.
Alex A.
62

Réponse directe:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequenceest une interface et la Stringclasse implémente CharSequence.

icza
la source
13

CharSequence est une interface et String est l'une des implémentations autres que StringBuilder, StringBuffer et bien d'autres.

Donc, tout comme vous utilisez InterfaceName i = new ItsImplementation(), vous pouvez utiliser CharSequence cs = new String("string")ou simplementCharSequence cs = "string";

krmanish007
la source
3

Vous pouvez utiliser

CharSequence[] cs = String[] {"String to CharSequence"};
Lucas Fialho
la source
8
Bienvenue sur Stack Overflow Lucas. Veuillez fournir plus d'explications qu'un extrait de code. Cela peut être évident pour nous, mais aidez les autres à leur faire savoir pourquoi ce code répond à la question.
Jean-Rémy Revy
Envelopper une chaîne dans un tableau n'aide pas à faire valoir que String est une CharSequence (et donc ce tableau de CharSequence est un tableau de String).
tishma
1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
avez raj
1

Tenter de fournir un contexte (possible) à la question de OP en signalant mes propres problèmes. Je travaille dans Scala, mais les messages d'erreur reçoivent tous les types Java de référence, et le message d'erreur ressemble beaucoup au compilateur se plaignant que CharSequence n'est pas une chaîne. J'ai confirmé dans le code source que String implémente l'interface CharSequence, mais le message d'erreur attire l'attention sur la différence entre String et CharSequence tout en cachant la véritable source du problème:

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)

J'ai pu résoudre ce problème en réalisant que le problème n'était pas String / CharSequence, mais plutôt un décalage entre java.lang.Iterable et Iterable intégré de Scala.

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

Mon problème particulier peut également être résolu via les réponses de Scala: rejoignez un itérable de chaînes

En résumé, OP et ceux qui rencontrent des problèmes similaires devraient analyser les messages d'erreur de très près et voir quels autres types de conversions pourraient être impliqués.

Sarah Messer
la source