¿Cómo convertir una cadena a secuencia de caracteres?

265

¿Cómo convertir Stringa CharSequenceen Java?

Daksh Gargas
fuente
16
La pregunta es algo no sensorial. Convertir una cadena en una secuencia de caracteres es como convertir una flauta en un instrumento musical. Una cadena ya es una secuencia de caracteres. La clase String implementa la interfaz CharSequence.
Jeff Scott Brown
3
La confusión del OP podría provenir de no saber lo que significa programar en una interfaz
Raedwald
9
@JeffScottBrown la pregunta realmente tiene sentido, es una maravilla legítima para cualquiera que lea el documento de Android o Java y se pierda el detalle de que CharSequence no es una clase. Su comentario me ayudó, pero si la pregunta no hubiera sido formulada como está, no la habría encontrado y habría pasado más tiempo buscando una respuesta de lo que realmente vale;)
Kheldar
Llegué a esta pregunta en el contexto de un problema maravilloso: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye
Así es como le aconsejaría a @JeffScottBrown que reformule su comentario: "La clase String implementa (IS-A) la interfaz CharSequence para que pueda pasar una String en lugar de una CharSequence. Es como cómo puede referirse a una flauta como un instrumento musical porque una flauta es un instrumento musical IS-A "
Vighnesh

Respuestas:

261

Desde String IS-A CharSequence , puede pasar un Stringlugar donde lo necesite CharSequenceo asignar un Stringa CharSequence:

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

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

Si desea convertir un CharSequencea a String, simplemente use el toStringmétodo que debe implementarse en cada implementación concreta de CharSequence.

Espero eso ayude.

João Silva
fuente
13
Excepto que no puede asignar un CharSequencea a Stringsin un reparto explícito.
gustafc
1
Arreglado el ejemplo, gracias. Me refería a la inversa, es decir, asignar Stringa a CharSequence.
João Silva
44
Estás en lo correcto. De hecho es una interfaz. Sin embargo, ese código no crea una instancia de a CharSequence. Simplemente asigna una instancia de Stringa una CharSequencevariable y, dado que Stringimplementa la CharSequenceinterfaz, el código funciona.
João Silva
55
Esta no es la respuesta. La pregunta es String -> to -> CharSequence. La respuesta es inversa.
trante
3
Esto responde a ambos. El póster primero resuelve trivialmente el problema String -> CharSequence al explicar que un String ES una CharSequence. Luego, el póster responde cómo pasar de CharSequence a String.
Alex A.
62

Respuesta directa:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequencees una interfaz y la Stringclase implementa CharSequence.

icza
fuente
13

CharSequence es una interfaz y String es una de las implementaciones distintas de StringBuilder, StringBuffer y muchas otras.

Entonces, tal como lo usas InterfaceName i = new ItsImplementation(), puedes usar CharSequence cs = new String("string")o simplementeCharSequence cs = "string";

krmanish007
fuente
3

Puedes usar

CharSequence[] cs = String[] {"String to CharSequence"};
Lucas Fialho
fuente
8
Bienvenido a Stack Overflow Lucas. Proporcione más explicaciones que un fragmento de código. Puede ser obvio para nosotros, pero ayuda a otros haciéndoles saber por qué este código responde la pregunta.
Jean-Rémy Revy
Envolver una cadena en una matriz no ayuda a señalar que String es un CharSequence (y, por lo tanto, esa matriz de CharSequence es una matriz de String).
tishma
1
CharSequence [] cs = new CharSequence [] {"String to CharSequence"};
avez raj
1

Intento proporcionar un contexto (posible) para la pregunta de OP publicando mi propio problema. Estoy trabajando en Scala, pero en los mensajes de error obtengo todos los tipos de Java de referencia, y el mensaje de error se parece mucho al compilador quejándose de que CharSequence no es una cadena. Confirmé en el código fuente que String implementa la interfaz CharSequence, pero el mensaje de error llama la atención sobre la diferencia entre String y CharSequence mientras oculta la fuente real 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)

Pude solucionar este problema al darme cuenta de que el problema no era String / CharSequence, sino una falta de coincidencia entre java.lang.Iterable y el Iterable incorporado de Scala.

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

Mi problema particular también se puede resolver a través de las respuestas en Scala: unirse a un iterable de cadenas

En resumen, OP y otros que se encuentran con problemas similares deben analizar los mensajes de error muy de cerca y ver qué otro tipo de conversiones pueden estar involucradas.

Sarah Messer
fuente