String.subString()和String.subSequence()之间的区别是什么

cod*_*441 21 java string substring subsequence

String.subSequence() 有以下javadoc:

返回一个新的字符序列,它是该序列的子序列.

调用此方法的形式

str.subSequence(begin, end)
Run Code Online (Sandbox Code Playgroud)

行为与调用完全相同

str.substring(begin, end) 
Run Code Online (Sandbox Code Playgroud)

定义此方法,以便String类可以实现CharSequence接口.

谁能解释一下?

Ama*_*mar 37

子序列是子串,后缀和前缀的推广.查找作为两个或更多字符串的子序列的最长字符串被称为最长公共子序列问题.

示例:字符串"anna"是字符串"banana"的子序列:

banana
 || ||
 an na
Run Code Online (Sandbox Code Playgroud)

字符串的子字符串是字符串后缀的前缀,等效于前缀的后缀.如果一个字符串是另一个字符串的子字符串,那么它也是一个子序列,这是一个更通用的概念.

示例:字符串"ana"是两个不同偏移量的banana的子字符串(和子序列):

banana
 |||||
 ana||
   |||
   ana
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多.

但就Java而言,javadoc中明确说明它们的使用没有任何差别.同样正如其中所述,该方法subSequence仅在类中实现,String以使其与CharSequence接口兼容.而这种方法的名称确实只是用词不当.

  • 这是我正在寻找的答案. (2认同)

小智 23

要理解这一点,首先需要知道的是substringsubsequence之间的区别

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

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

让str_a ="你好"

我们还有以下字符串:

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

str_b是str_a的子字符串,str_c也是str_a的子字符串,但str_d不是str_a的子字符串,因为此子字符串不连续.

现在所有子字符串都是子序列,因为维护了订单.

str_d是str_a的子序列,str_e也是str_a的子序列,但是str_f不是str_a的子序列,因为在这种情况下不保持顺序.

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


Sam*_*Sam 22

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

String string = "Hello";
CharSequence subSequence = s.subSequence(0, 5);
Run Code Online (Sandbox Code Playgroud)

它只是在没有实例化a的新实例charsCharSequence情况下无法更改内部的读取CharSequence.

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

String string = "Hello";
String subSequence = (String) s.subSequence(0, 5);
Run Code Online (Sandbox Code Playgroud)

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

  • @sam上面的评论应该是答案.这样可以节省我的时间来完成答案. (10认同)
  • 它们完全相同.它只返回一个`CharSequence`而另一个返回一个`String`.节省必须在他们之间施放.正如它在[javadoc](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#subSequence(int,int))中所说的那样,它所定义的String类可以实现(并使用)`CharSequence`接口. (9认同)

小智 13

通俗的理解:

子字符串:子字符串是字符串中连续的字符序列,其中 oder 很重要。

Substring
string
ring
Run Code Online (Sandbox Code Playgroud)

序列:从字符串中,任何字符但按顺序排列。

Substring
u s i
s b t i n g
r g
Run Code Online (Sandbox Code Playgroud)