Como converter uma String para CharSequence?


265

Como converter Stringpara CharSequenceJava?


16
A questão é meio não sensorial. Converter uma corda em um CharSequence é como converter uma flauta em um instrumento musical. Uma String já é uma CharSequence. A classe String implementa a interface CharSequence.
Jeff Scott Brown

3
A confusão do OP pode resultar de não saber o que significa programa para uma interface
Raedwald

9
@JeffScottBrown, a pergunta realmente faz sentido, é uma maravilha legítima para quem lê o documento Android ou Java e perde os detalhes de que CharSequence não é uma classe. O seu comentário me ajudou, mas se a questão não tinha sido redigido do jeito que está, eu não teria encontrado e ter passado mais tempo procurando uma resposta que vale realmente a pena;)
Kheldar

Eu vim para esta questão no contexto de um problema Groovy: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
blackeye

Aqui está como eu aconselho @JeffScottBrown a reformular seu comentário- "A classe String implementa (IS-A) a interface CharSequence para que você possa passar uma String no lugar de uma CharSequence. É como se você pudesse se referir a uma flauta como um instrumento musical porque uma flauta é um instrumento musical "
Vighnesh

Respostas:


261

Desde o String IS-A CharSequence , você pode passar um Stringonde quer que você precise CharSequenceou atribuir um Stringa CharSequence:

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

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

Se você deseja converter um CharSequencepara a String, basta usar o toStringmétodo que deve ser implementado em todas as implementações concretas de CharSequence.

Espero que ajude.


13
Exceto que você não pode atribuir CharSequencea a Stringsem uma conversão explícita.
gustafc 8/09/09

1
Corrigido o exemplo, obrigado. Eu quis dizer o contrário, ou seja, atribuir a Stringa a CharSequence.
João Silva

4
Você está certo. É de fato uma interface. No entanto, esse código não instancia um CharSequence. Ele simplesmente atribui uma instância de Stringa uma CharSequencevariável e, como Stringimplementa a CharSequenceinterface, o código funciona.
João Silva

5
Esta não é a resposta. A pergunta é String -> to -> CharSequence. A resposta é inversa.
trante

3
Isso responde a ambos. O primeiro cartaz resolve trivialmente o problema String -> CharSequence, explicando que uma String É uma CharSequence. Em seguida, o cartaz responde como passar de CharSequence para String.
Alex A.

62

Resposta direta:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequenceé uma interface e a Stringclasse é implementada CharSequence.


13

CharSequence é uma interface e String é uma das implementações que não são StringBuilder, StringBuffer e muitas outras.

Então, assim como você usa InterfaceName i = new ItsImplementation(), você pode usar CharSequence cs = new String("string")ou simplesmenteCharSequence cs = "string";


3

Você pode usar

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

8
Bem-vindo ao Stack Overflow Lucas. Forneça mais explicações do que um trecho de código. Pode ser óbvio para nós, mas ajude outras pessoas a informar por que esse código responde à pergunta.
Jean-Rémy Revy

O agrupamento de uma string em uma matriz não ajuda a afirmar que String é uma CharSequence (e, portanto, essa matriz de CharSequence é uma matriz de String).
Tishma

1
CharSequence [] cs = new CharSequence [] {"String para CharSequence"};
avez raj

1

Tentando fornecer algum contexto (possível) para a pergunta do OP, publicando meu próprio problema. Estou trabalhando no Scala, mas as mensagens de erro estão recebendo todos os tipos Java de referência e a mensagem de erro é muito parecida com o compilador reclamando que CharSequence não é uma String. Confirmei no código-fonte que String implementa a interface CharSequence, mas a mensagem de erro chama a atenção para a diferença entre String e CharSequence enquanto oculta a fonte real do 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)

Consegui corrigir esse problema com a constatação de que o problema não era String / CharSequence, mas uma incompatibilidade entre java.lang.Iterable e o Iterable interno do Scala.

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

Meu problema específico também pode ser resolvido através das respostas em Scala: junte-se a uma iterável de strings

Em resumo, o OP e outras pessoas que se deparam com problemas semelhantes devem analisar as mensagens de erro com muita atenção e ver quais outras conversões de tipo podem estar envolvidas.

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.