如何将字符串转换为CharSequence?


265

如何在Java中转换StringCharSequence


16
这个问题有点荒谬。将字符串转换为CharSequence就像将长笛转换为乐器一样。字符串已经是CharSequence。String类实现CharSequence接口。
杰夫·斯科特·布朗

3
OP的困惑可能源于不知道编程接口的
Raedwald 2014年

9
@JeffScottBrown这个问题实际上是有道理的,对于任何阅读Android或Java文档并错过CharSequence不是类的细节的人来说,这都是一个合理的奇迹。您的评论对我有帮助,但是如果问题的措辞没有这么简单,我将找不到它,并且花了更多的时间来寻找答案,这比它的实际价值还高;)
Kheldar 2015年

我是在一个古怪的问题中遇到这个问题的: Exception groovy.lang.MissingMethodException: No signature of method: static java.util.regex.Pattern.matcher() is applicable for argument types: (java.lang.String)
BlackEye,2015年

这是我建议@JeffScottBrown改写他的评论的方式:“ String类实现(IS-A)CharSequence接口,因此您可以传入String代替CharSequence。这就像您可以将长笛称为乐器,因为它是长笛IS-A乐器”
Vighnesh

Answers:


261

String IS-A开始 CharSequence,您可以String在需要的地方传递,也可以将CharSequence分配StringCharSequence

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

希望能帮助到你。


13
不同之处在于,你无法分配CharSequenceString没有明确的转换。
gustafc

1
修复了示例,谢谢。我的意思是相反的方式,String即将a 分配给a CharSequence
若昂·席尔瓦

4
你是对的。它确实是一个接口。但是,该代码不会实例化CharSequence。它只是实例分配String给一个CharSequence变量,因为String实现了CharSequence接口,代码工作。
若昂·席尔瓦

5
这不是答案。问题是字符串->到-> CharSequence。答案是相反的。
trante

3
这都回答了。海报首先通过解释字符串是CharSequence来简单地解决了String-> CharSequence问题。然后发帖人回答如何从CharSequence转到String。
Alex A.

62

直接回答:

String s = "Hello World!";

// String => CharSequence conversion:

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

CharSequence是一个接口,String该类实现CharSequence


13

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

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


3

您可以使用

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

8
欢迎使用Stack Overflow Lucas。请提供比代码段更多的解释。对于我们来说,这可能很明显,但是可以帮助其他人让他们知道为什么此代码可以回答问题。
让·雷米Revy

将字符串包装到数组中并不能说明String是一个CharSequence(因此,CharSequence的数组是String的数组)。
tishma '17

1
CharSequence [] cs =新的CharSequence [] {“ CharSequence的字符串”};
avez raj

1

尝试通过张贴自己的麻烦来为OP的问题提供一些(可能的)上下文。我正在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和遇到类似问题的其他人员应非常仔细地分析错误消息,并查看可能涉及的其他类型转换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.