233

如何将 Java 转换CharSequenceString?

4

6 回答 6

375

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

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

于 2011-10-10T00:38:05.510 回答
93

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

toString()方法在Object. CharSequence是一个接口;尽管该toString()方法作为该接口的一部分出现,但在编译时没有什么会迫使您覆盖它并遵守该CharSequence toString()方法的 javadoc 对该方法施加的附加约束toString();即它应该返回一个包含按返回顺序的字符的字符串charAt()

您的 IDE 甚至不会通过提醒您可能应该覆盖toString(). 例如,在 intellij 中,如果您创建一个新的CharSequence实现,您将看到以下内容:http: //puu.sh/2w1RJ。注意没有toString().

如果您依赖于toString()任意的CharSequence,它应该可以工作,只要CharSequence实施者正确地完成了他们的工作。但是,如果您想完全避免任何不确定性,则应使用StringBuilderand append(),如下所示:

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
于 2013-04-08T02:40:12.543 回答
29

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

String.valueOf(charSequence)

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

charSequence当方法可以返回 a或null值时,这很有用。

于 2017-12-27T11:59:35.883 回答
1

如果要转换 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());
   }
}
于 2022-01-06T19:43:13.270 回答
1

最安全的方式

String string = String.valueOf(charSequence);

让我们深入

我们可以尝试将 a 转换为 3 种常用CharSequence方法String

  1. 类型铸造String string = (String) charSequence;
  2. 来电toString()String string = charSequence.toString();
  3. String.valueOf()方法String string = String.valueOf(charSequence);

如果我们在其中运行它们,CharSequence charSequence = "a simple string";那么它们中的所有 3 个都会产生预期的结果。

当我们不确定CharSequence. 实际上,CharSequenceis aninterface是其他几个类实现的,例如 - StringCharBufferStringBuffer等。因此,将 a 转换String为 aCharSequence是一个简单的赋值操作,不需要强制转换或任何其他操作。但是,对于相反的情况,Upcasting是不正确的。

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

另一方面,如果CharSequencenull选项 2,调用toString(), 将给出NullPointerException.

现在在内部,方法在进行检查后String.valueOf()调用该方法。所以,这是最安全的方法。Java文档toString()null

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


请注意:如果CharSequencenullthenString.valueOf()方法返回 string- "null"而不是nullvalue

于 2021-11-05T04:49:42.303 回答
0

您也可以取消 Stringbuilder。

new StringBuilder(charSequence).toString();
于 2021-11-05T06:14:18.120 回答