如何将字符串转换为CharSequence?

如何在Java中转换StringCharSequence ?

411959 次浏览

由于String 是一个 CharSequence,你可以在任何需要CharSequence的地方传递String,或者将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[] cs = String[] {"String to CharSequence"};

CharSequence是一个接口,而String是它的实现之一,而不是StringBuilder、StringBuffer和许多其他实现。

因此,就像你使用InterfaceName i = new ItsImplementation()一样,你可以使用CharSequence cs = new String("string")或简单地使用CharSequence cs = "string";

试图通过发布我自己的麻烦来为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:加入一个字符串的迭代对象的答案来解决

总之,OP和其他遇到类似问题的人应该非常仔细地解析错误消息,并查看可能涉及的其他类型转换。

这是个好问题!如果您调用了使用泛型的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);