¿Cómo convertir CharSequence a String?

Respuestas:

339

Invocando su toString()método.

Devuelve una cadena que contiene los caracteres en esta secuencia en el mismo orden que esta secuencia. La longitud de la cadena será la longitud de esta secuencia.

Mike Samuel
fuente
@TheOnlyAnil, ¿las llamadas setText(CharSequence)no hacen lo que necesita?
Mike Samuel
Quiero hacer clic en el título de actionBar.
TheOnlyAnil
@TheOnlyAnil, tal vez deberías hacer eso como una pregunta. Los comentarios sobre una respuesta a una pregunta relacionada tangencialmente no son un buen lugar para tratar de resolver sus requisitos.
Mike Samuel
Stackoverflow no me deja publicar ninguna pregunta. : / por cierto lo hice anoche. La barra de acción personalizada es la solución :)
TheOnlyAnil
1
@WillByers esa salida se parece a toString de una matriz CharSequence, no a una secuencia CharSequence.
Mike Samuel
90

Aquí hay un problema sutil que es un poco un problema.

El toString()método tiene una implementación base en Object. CharSequencees una interfaz; y aunque el toString()método aparece como parte de esa interfaz, no hay nada en tiempo de compilación que lo obligará a anularlo y respetar las restricciones adicionales que el CharSequence toString()javadoc del método aplica al toString()método; es decir, debe devolver una cadena que contenga los caracteres en el orden devuelto por charAt().

Su IDE ni siquiera lo ayudará al recordarle que probablemente debería anularlo toString(). Por ejemplo, en intellij, esto es lo que verá si crea una nueva CharSequenceimplementación: http://puu.sh/2w1RJ . Tenga en cuenta la ausencia de toString().

Si confía en toString()un arbitrario CharSequence, debería funcionar siempre que el CharSequenceimplementador haya hecho su trabajo correctamente. Pero si desea evitar cualquier incertidumbre por completo, debe usar un StringBuildery append(), así:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
fragorl
fuente
9
No debe cometer errores / empeorar su código porque otros podrían haber cometido un error.
Lodewijk
9
devolver nuevo StringBuilder (charSequence) .toString (); es un solo forro equivalente.
Gábor Lipták
22
ESTA RESPUESTA ES INCORRECTA La CharSequenceinterfaz define explícitamente toString(): el implementador no se lo habrá perdido. El javadoc dice "Devuelve una cadena que contiene los caracteres de esta secuencia en el mismo orden que esta secuencia. La longitud de la cadena será la longitud de esta secuencia" desde el inicio en 1.4 . Gente, verifique lo que votó
earcam
2
Esto es tonto. Si no confía en que el implementador seguirá el contrato, todas las apuestas están canceladas. Pasarlo como parámetro también StringBuilderpodría fallar en hacer lo que espera. Lo mismo ocurre con cualquier otra interfaz, tal como Listo Set, en particular, su equals()y hashCode()métodos que se compilará sin sustituciones de, pero debe ser anulado de acuerdo con el contrato.
shmosel
3
El hecho de que la interfaz haga esto es posiblemente una mala decisión en ese sentido, y mi respuesta simplemente destaca que este es un lugar más fácil de lo normal para que ocurra un error humano.
fragorl
19

Puede usar directamente String.valueOf ()

String.valueOf(charSequence)

Aunque esto es lo mismo, ya toString()que hace una comprobación nula charSequenceantes de llamar a toString.

Esto es útil cuando un método puede devolver un valor charSequenceo null.

Abhishek Batra
fuente
8
Esto en realidad solo me mordió hoy. si charSequencees nulo, la cadena devuelta será "null"y no null.
ChrisThomas
Oh. Tiene sentido. Eliminaré esta respuesta
Abhishek Batra
1
Creo que esto es perfecto para algunos casos.
Shukant Pal