如何将CharSequence转换为String?


Answers:


339

通过调用其toString()方法。

返回一个包含此序列中字符的字符串,该字符串的顺序与此序列相同。字符串的长度将是此序列的长度。


@TheOnlyAnil,打电话setText(CharSequence)不满足您的需求吗?
Mike Samuel

我想使actionBar标题可点击。
TheOnlyAnil

@TheOnlyAnil,也许您应该问一个问题。对与切向相关的问题的答案的评论不是尝试弄清楚您的要求的好地方。
Mike Samuel

Stackoverflow不会让我发布任何问题。:/顺便说一句,我昨晚做了。解决方案可以使用自定义操作栏:)
TheOnlyAnil,2015年

1
输出的@WillByers看起来像CharSequence数组的toString,而不是CharSequence。
Mike Samuel

90

这里有一个微妙的问题,有点棘手。

toString()方法在中具有基本实现ObjectCharSequence是一个接口;尽管该toString()方法显示为该接口的一部分,但在编译时没有什么会迫使您覆盖它并遵守该CharSequence toString()方法的javadoc对该toString()方法施加的其他约束;也就是说,它应按返回的顺序返回包含字符的字符串charAt()

您的IDE甚至不会提醒您可能应该覆盖,从而无法为您提供帮助toString()。例如,在intellij中,如果您创建新的CharSequence实现,就会看到以下内容:http : //puu.sh/2w1RJ。请注意缺少toString()

如果您依赖toString()任意对象CharSequence,那么只要实现者能够正确完成工作,它就可以工作CharSequence。但是,如果您想完全避免任何不确定性,则应使用StringBuilderappend(),如下所示:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();

9
您不应该犯错误/使代码更糟,因为其他人可能犯了错误。
Lodewijk

9
返回新的StringBuilder(charSequence).toString(); 是单衬板等效物。
伽柏Lipták

22
这个答案是错CharSequence界面明确定义toString()-的实现者将不会错过这个。所述的Javadoc状态“返回包含此序列中的相同的顺序,因为这序列字符的字符串。该字符串的长度将是这个序列的长度”,因为在开始1.4人们,请确认您
赞成

2
真傻 如果您不信任实施者遵守合同,那么所有的赌注都将无效。将其作为参数传递也StringBuilder可能无法完成您期望的操作。对于任何其他接口(例如List或)Set,也是如此,尤其是它们的equals()hashCode()方法,它们将进行编译而不会覆盖,但必须根据合同对其进行覆盖。
shmosel '16

3
在这方面,接口可以做到这一点的事实可以说是一个错误的决定,我的回答只是着重指出,与人为错误相比,这是比正常情况更容易发生的地方。
fragorl

19

您可以直接使用String.valueOf()

String.valueOf(charSequence)

尽管这与在实际调用toString之前toString()对null进行空检查相同charSequence

当方法可以返回a charSequencenullvalue 时,这很有用。


8
今天这实际上只是在咬我。如果charSequence为null,则返回的字符串将为"null"and not null
克里斯·托马斯(ChrisThomas)

哦。说得通。我将删除此答案
Abhishek Batra

1
我认为这在某些情况下是完美的。
Shukant Pal
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.