Как преобразовать строку в CharSequence?

Как конвертировать String в CharSequence на яве?

5 ответов

Поскольку String ЭТО CharSequenceВы можете пройти String везде, где вам нужно CharSequenceили назначить String к CharSequence:

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

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

Если вы хотите конвертировать CharSequence к StringПросто используйте toString метод, который должен быть реализован каждой конкретной реализацией CharSequence,

Надеюсь, поможет.

Прямой ответ:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequence это интерфейс, а String реализует класс CharSequence,

CharSequence - это интерфейс, а String - одна из реализаций, отличных от StringBuilder, StringBuffer и многих других.

Итак, так же, как вы используете InterfaceName i = new ItsImplementation(), ты можешь использовать CharSequence cs = new String("string") или просто CharSequence cs = "string";

Ты можешь использовать

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

Это хороший вопрос! У вас могут возникнуть проблемы, если вы вызовете API, который использует универсальные шаблоны, и захотите назначить или вернуть этот результат с другим подтипом универсального типа. Java 8 помогает преобразовать:

    List<String> input = new LinkedList<>(Arrays.asList("a", "b", "c"));
    List<CharSequence> result;
    
//    result = input; // <-- Type mismatch: cannot convert from List<String> to List<CharSequence>
    result = input.stream().collect(Collectors.toList());
    
    System.out.println(result);

Попытка предоставить некоторый (возможный) контекст для вопроса ОП путем публикации моей собственной проблемы. Я работаю в Scala, но в сообщениях об ошибках я получаю все ссылочные типы Java, и сообщение об ошибке читается так же, как компилятор, жалующийся на то, что CharSequence не является String. В исходном коде я подтвердил, что String реализует интерфейс CharSequence, но сообщение об ошибке обращает внимание на разницу между String и CharSequence, скрывая при этом реальный источник проблемы:

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)

Я смог исправить эту проблему, осознав, что проблема не в String / CharSequence, а скорее в несоответствии между java.lang.Iterable и встроенным в Scala Iterable.

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

Моя конкретная проблема также может быть решена с помощью ответов в Scala: присоединить итерируемую строку

Таким образом, OP и другие, кто сталкивается с подобными проблемами, должны очень внимательно проанализировать сообщения об ошибках и посмотреть, какие преобразования типов могут быть задействованы.

Другие вопросы по тегам