如何转换String
成CharSequence
Java?
6 回答
由于String
IS-A CharSequence
,您可以String
在需要 a 的任何地方传递 a CharSequence
,或将 a 分配String
给 a CharSequence
:
CharSequence cs = "string";
String s = cs.toString();
foo(s); // prints "string"
public void foo(CharSequence cs) {
System.out.println(cs);
}
如果要将 a 转换CharSequence
为 a 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);
试图通过发布我自己的麻烦来为 OP 的问题提供一些(可能的)上下文。我在 Scala 中工作,但我收到的所有错误消息都引用了 Java 类型,并且错误消息读起来很像编译器抱怨 CharSequence不是字符串。我在源码中确认了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 的答案来解决:join an iterable of strings
总之,遇到类似问题的 OP 和其他人应该非常仔细地解析错误消息,看看可能涉及哪些其他类型转换。