如何在Java中将String
转换为CharSequence
?
答案 0 :(得分:248)
由于String
IS-A CharSequence
,您可以在需要String
的任何地方传递CharSequence
,或指定{{1}转到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
方法。
希望它有所帮助。
答案 1 :(得分:49)
直接回答:
String s = "Hello World!";
// String => CharSequence conversion:
CharSequence cs = s; // String is already a CharSequence
CharSequence
是一个界面,String
类实现了CharSequence
。
答案 2 :(得分:11)
CharSequence是一个接口,String是除StringBuilder,StringBuffer和许多其他实现之外的其中一个实现。
因此,就像您使用InterfaceName i = new ItsImplementation()
一样,您可以使用CharSequence cs = new String("string")
或仅使用CharSequence cs = "string";
答案 3 :(得分:3)
您可以使用
CharSequence[] cs = String[] {"String to CharSequence"};
答案 4 :(得分:0)
尝试通过张贴自己的麻烦来为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和遇到类似问题的其他人员应非常仔细地分析错误消息,并查看可能涉及的其他类型转换。
答案 5 :(得分:0)
这是一个好问题!如果调用使用泛型的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);