String.subString() 和 String.subSequence() 有什么区别

新手上路,请多包涵

String.subSequence() 具有以下 javadoc:

返回一个新的字符序列,它是此序列的子序列。

调用此表单方法

str.subSequence(begin, end)

行为方式与调用完全相同

str.substring(begin, end)

定义此方法是为了使 String 类可以实现 CharSequence 接口。

谁能解释一下?

原文由 124697 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 913
2 个回答

使用 str.subSequence(begin, end) 返回一个 CharSequence ,它是表示为字符序列的字符串的只读形式。例如:

 String string = "Hello";
CharSequence subSequence = string.subSequence(0, 5);

它是只读的,你不能在 chars 中更改 CharSequence 而不实例化 CharSequence .

如果必须使用 str.subSequence(begin, end) ,则可以将结果转换为 String

 String string = "Hello";
String subSequence = (String) string.subSequence(0, 5);

并使用所有正常的 String 运算符,如 subSequence += " World";

原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议

要理解这一点,您首先需要知道的是 子串 和子 序列 之间的区别

substring 是字符串的 连续 部分或子部分

然而

子序列 是字符串或序列的一部分,可能连续也可能不连续,但元素的 顺序 保持不变

例如,假设我们有以下字符串:

 str_a="hello there"
str_b="hello"
str_c="ello th"
str_d="hllo"
str_e="ho hre"
str_f="there hello"

str_b is a substring of str_a , str_c is also a substring of str_a but str_d is not a substring str_a 因为这个子串不是 连续 的。

现在所有子串都是子序列,因为顺序得到了维护。

str_d is a subsequence of str_a , str_e is also a subsequence of str_a however str_f is not a subsequence的 str_a 因为在这种情况下 订单 没有得到维护。

现在对于 java,javadoc 中没有关于这些方法的适当说明。

原文由 Nishchay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题