如何将Java CharSequence转换为字符串?


当前回答

你也可以下载Stringbuilder。

new StringBuilder(charSequence).toString();

其他回答

最安全的方法

String string = String.valueOf(charSequence);

让我们深潜

有3种常见的方法,我们可以尝试将CharSequence转换为String:

类型转换:字符串字符串=(字符串)charSequence; 调用toString(): String String = charSequence.toString(); String. valueof()方法:String String = String. valueof (charSequence);

如果我们运行这些where CharSequence CharSequence = "a simple string";然后这三个都将产生预期的结果。

当我们不确定CharSequence的性质时,问题就出现了。事实上,CharSequence是其他几个类实现的接口,如- String, CharBuffer, StringBuffer等。因此,将String转换为CharSequence是一个简单的赋值操作,不需要强制转换或任何东西。但是,对于相反的“向上casting”来说,这是不正确的。

如果我们确定CharSequence实际上是一个String对象,只有这样我们才能使用选项1-类型转换。否则,我们将得到一个ClassCastException。在这种情况下,选项2和3是安全的。

另一方面,如果CharSequence为空,那么选项2,调用toString(),将给出一个NullPointerException。

现在,在内部,String.valueOf()方法在执行空检查后调用toString()方法。所以,这是最安全的方法。JavaDoc:

如果参数为null,则字符串等于"null";否则,返回obj.toString()的值。


请注意:如果CharSequence为空,则string . valueof()方法返回字符串- "null",而不是空值。

通过调用它的toString()方法。

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

如果你想转换一个CharSequence数组, 你可以简单地这样做,也可以将它存储在一个String[]变量中。

CharSequence[] textMsgs = (CharSequence[])sbm.getNotification().extras.get(Notification.EXTRA_TEXT_LINES);
if (textMsgs != null) {
   for (CharSequence msg : textMsgs) {
       Log.e("Msg", msg.toString());
   }
}

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

toString()方法在Object中有一个基本实现。CharSequence是一个接口;尽管toString()方法作为该接口的一部分出现,但在编译时没有任何东西会强迫你重写它,并遵守CharSequence toString()方法的javadoc对toString()方法施加的额外约束;即它应该返回一个字符串,该字符串包含由charAt()返回的字符顺序。

您的IDE甚至不会提醒您可能应该重写toString()来帮助您。例如,在intellij中,如果您创建了一个新的CharSequence实现,您将看到:http://puu.sh/2w1RJ。请注意toString()的缺失。

如果你依赖于任意CharSequence上的toString(),只要CharSequence实现者正确地完成了他们的工作,它就应该工作。但如果你想避免任何不确定性,你应该使用StringBuilder和append(),如下所示:

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

你也可以下载Stringbuilder。

new StringBuilder(charSequence).toString();