Como converter CharSequence para String?


Respostas:


339

Invocando seu toString()método.

Retorna uma sequência que contém os caracteres nesta sequência na mesma ordem que esta sequência. O comprimento da string será o comprimento dessa sequência.


@TheOnlyAnil, ligar setText(CharSequence)não faz o que você precisa?
Mike Samuel

Quero tornar o título da actionBar clicável.
TheOnlyAnil 4/15

@ TheOnlyAnil, talvez você deva fazer isso como uma pergunta. Os comentários sobre uma resposta a uma pergunta tangencialmente relacionada não são um bom lugar para tentar resolver seus requisitos.
Mike Samuel

O Stackoverflow não me permite postar nenhuma pergunta. : / btw eu fiz isso ontem à noite. ActionBar personalizado é a solução :)
TheOnlyAnil

1
@WillByers que a saída se parece com o toString de uma matriz CharSequence, não uma CharSequence.
Mike Samuel

90

Há uma questão sutil aqui que é um pouco difícil.

O toString()método possui uma implementação básica em Object. CharSequenceé uma interface; e embora o toString()método apareça como parte dessa interface, não há nada em tempo de compilação que forçará você a substituí-lo e respeitar as restrições adicionais que o CharSequence toString()javadoc do método impõe ao toString()método; ou seja, ele deve retornar uma sequência contendo os caracteres na ordem retornada por charAt().

Seu IDE nem ajudará você, lembrando que você provavelmente deve substituir toString(). Por exemplo, em intellij, é isso que você verá se criar uma nova CharSequenceimplementação: http://puu.sh/2w1RJ . Observe a ausência de toString().

Se você confiar em toString()um arbitrário CharSequence, ele deverá funcionar, desde que o CharSequenceimplementador tenha feito seu trabalho corretamente. Mas se você quiser evitar qualquer incerteza por completo, você deve usar um StringBuildere append(), assim:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();

9
Você não deve cometer erros / piorar o seu código, porque outros podem ter cometido um erro.
Lodewijk

9
retornar novo StringBuilder (charSequence) .toString (); é um equivalente de liner único.
Gábor Lipták

22
ESTA RESPOSTA ESTÁ ERRADA A CharSequenceinterface define explicitamente toString()- o implementador não terá perdido isso. O javadoc declara "Retorna uma string contendo os caracteres nesta sequência na mesma ordem que esta sequência. O comprimento da string será o comprimento dessa sequência" desde o início em 1.4 . As pessoas, por favor, verifique o que você upvote
earcam

2
Isso é bobo. Se você não confiar no implementador para seguir o contrato, todas as apostas estão desativadas. Passá-lo como parâmetro também StringBuilderpode falhar em fazer o que você espera. O mesmo vale para qualquer outra interface, como Listou Set, em particular seus métodos equals()e hashCode()que serão compilados sem substituições, mas devem ser substituídos de acordo com o contrato.
shmosel 29/07

3
O fato de a interface fazer isso é indiscutivelmente uma decisão ruim a esse respeito, e minha resposta simplesmente destaca que esse é um local mais fácil do que o normal para o erro humano ocorrer.
fragorl

19

Você pode usar diretamente String.valueOf ()

String.valueOf(charSequence)

Embora seja o mesmo toString()que faz uma verificação nula charSequenceantes de realmente chamar toString.

Isso é útil quando um método pode retornar um charSequenceou nullvalor.


8
Isso realmente me mordeu hoje. se charSequencefor nulo, a sequência retornada será "null"e não null.
precisa saber é o seguinte

Oh Faz sentido. Retirei esta resposta
Abhishek Batra

1
Eu acho que isso é perfeito para alguns casos.
Shukant Pal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.