Come convertire una stringa in CharSequence?


265

Come convertire Stringin CharSequencein Java?


16
La domanda è in qualche modo non sensata. Convertire una stringa in una CharSequence è come convertire un flauto in uno strumento musicale. Una stringa è già una CharSequence. La classe String implementa l'interfaccia CharSequence.
Jeff Scott Brown,

3
La confusione del PO potrebbe derivare dal non sapere cosa significhi programmare su un'interfaccia
Raedwald

9
@JeffScottBrown la domanda in realtà ha senso, è una meraviglia legittima per chiunque legga il documento Android o Java e manchi il dettaglio che CharSequence non è una classe. Il tuo commento mi ha aiutato, ma se la domanda non fosse stata formulata così com'è, non l'avrei trovata e avrei trascorso più tempo a cercare una risposta di quanto valga davvero la pena;)
Kheldar

Sono arrivato a questa domanda nel contesto di un groovy Problema: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye,

Ecco come consiglierei a @JeffScottBrown di riformulare il suo commento: "La classe String implementa (IS-A) l'interfaccia CharSequence in modo da poter passare una stringa al posto di una CharSequence. È come se si potesse riferirsi a un flauto come a strumento musicale perché un flauto IS-A strumento musicale "
Vighnesh,

Risposte:


261

Da String IS-A CharSequence , puoi passare un Stringovunque tu abbia bisogno di CharSequence, o assegnare un Stringa a CharSequence:

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

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

Se vuoi convertire a CharSequencein a String, usa il toStringmetodo che deve essere implementato da ogni implementazione concreta di CharSequence.

Spero che sia d'aiuto.


13
Solo che non puoi assegnare a CharSequencea a Stringsenza un cast esplicito.
gustafc,

1
Risolto l'esempio, grazie. Intendevo il contrario, ovvero assegnare Stringa a CharSequence.
João Silva,

4
Hai ragione. È davvero un'interfaccia. Tuttavia, quel codice non crea un'istanza a CharSequence. Assegna semplicemente un'istanza Stringa una CharSequencevariabile e, poiché Stringimplementa l' CharSequenceinterfaccia, il codice funziona.
João Silva,

5
Questa non è la risposta La domanda è String -> to -> CharSequence. La risposta è inversa
trante,

3
Questo risponde ad entrambi. Poster risolve banalmente il problema String -> CharSequence spiegando che una stringa è una CharSequence. Quindi il poster risponde come passare da CharSequence a String.
Alex A.

62

Risposta diretta:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequenceè un'interfaccia e la Stringclasse implementa CharSequence.


13

CharSequence è un'interfaccia e String è una delle implementazioni diverse da StringBuilder, StringBuffer e molte altre.

Quindi, proprio come usi InterfaceName i = new ItsImplementation(), puoi usare CharSequence cs = new String("string")o semplicementeCharSequence cs = "string";


3

Puoi usare

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

8
Benvenuti in Stack Overflow Lucas. Fornisci ulteriori spiegazioni di uno snippet di codice. Per noi può essere ovvio, ma aiuta gli altri a far loro sapere perché questo codice risponde alla domanda.
Jean-Rémy Revy,

Avvolgere una stringa in una matrice non aiuta a sottolineare che String è una CharSequence (e quindi quella matrice di CharSequence è una matrice di String).
tishma,

1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
Avez Raj,

1

Tentare di fornire un contesto (possibile) alla domanda di OP pubblicando i miei problemi. Sto lavorando in Scala, ma i messaggi di errore ricevono tutti i tipi di Java di riferimento e il messaggio di errore è molto simile al compilatore che si lamenta che CharSequence non è una stringa. Ho confermato nel codice sorgente che String implementa l'interfaccia CharSequence, ma il messaggio di errore richiama l'attenzione sulla differenza tra String e CharSequence nascondendo la vera fonte del problema:

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)

Sono stato in grado di risolvere questo problema con la consapevolezza che il problema non era String / CharSequence, ma piuttosto una discrepanza tra java.lang.Iterable e Iterable incorporato di Scala.

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

Il mio problema particolare può anche essere risolto tramite le risposte alla Scala: unisciti a un iterabile di stringhe

In sintesi, OP e altri che riscontrano problemi simili dovrebbero analizzare i messaggi di errore molto attentamente e vedere quali altre conversioni di tipo potrebbero essere coinvolte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.