Как преобразовать строку в 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 и другие, кто сталкивается с подобными проблемами, должны очень внимательно проанализировать сообщения об ошибках и посмотреть, какие преобразования типов могут быть задействованы.