如何将Java CharSequence转换为String?
CharSequence
String
通过调用它的toString()方法。
toString()
返回一个字符串,其中包含此序列中的字符,其顺序与此序列相同。字符串的长度就是这个序列的长度。
这里有一个微妙的问题,有点棘手。
toString()方法在Object中有一个基本实现。CharSequence是一个接口;尽管toString()方法作为该接口的一部分出现,但在编译时没有任何东西会强迫你重写它,并遵守CharSequence toString()方法的javadoc对toString()方法施加的额外约束;即它应该返回一个字符串,其中包含charAt()返回的顺序的字符。
Object
charAt()
你的IDE甚至不会通过提醒你应该覆盖toString()来帮助你。例如,在intellij中,如果你创建一个新的CharSequence实现:http://puu.sh/2w1RJ,这就是你将看到的。注意缺少toString()。
如果你在任意的CharSequence上依赖toString(),它应该工作,只要CharSequence实现者正确地完成了他们的工作。但如果你想避免任何不确定性,你应该使用StringBuilder和append(),如下所示:
StringBuilder
append()
final StringBuilder sb = new StringBuilder(charSequence.length()); sb.append(charSequence); return sb.toString();
你可以直接使用String.valueOf()
String.valueOf(charSequence)
虽然这与toString()相同,但它在实际调用toString之前对charSequence进行空检查。
charSequence
当方法可以返回charSequence或null值时,这很有用。
null
String string = String.valueOf(charSequence);
有3种常见的方法可以尝试将CharSequence转换为String:
String string = (String) charSequence;
String string = charSequence.toString();
String.valueOf()
如果我们在CharSequence charSequence = "a simple string";中运行这些,那么所有3个都将产生预期的结果。
CharSequence charSequence = "a simple string";
当我们不确定CharSequence的性质时,问题就发生了。事实上,CharSequence是由其他几个类实现的interface,如- String, CharBuffer, StringBuffer等。因此,将String转换为CharSequence是一个简单的赋值操作,不需要强制转换或任何其他操作。但是,对于相反的向上转型,这是不正确的。
interface
CharBuffer
StringBuffer
如果我们确定CharSequence实际上是String的对象,只有这样我们才能使用选项1-类型转换。否则,我们将得到ClassCastException。在这种情况下,选项2和3是安全的。
ClassCastException
另一方面,如果CharSequence是null,那么选项2,调用toString(),将给出一个NullPointerException。
NullPointerException
现在,在内部,String.valueOf()方法在执行null检查后调用toString()方法。所以,这是最安全的方法。JavaDoc:
如果参数为null,则字符串等于"null";否则,返回obj.toString()的值。
请注意:如果CharSequence是null,那么String.valueOf()方法返回字符串- "null", 不是null值。
"null"
你也可以下载Stringbuilder。
new StringBuilder(charSequence).toString();
CharSequence[] textMsgs = (CharSequence[])sbm.getNotification().extras.get(Notification.EXTRA_TEXT_LINES); if (textMsgs != null) { for (CharSequence msg : textMsgs) { Log.e("Msg", msg.toString()); } }