String.subSequence()
有以下javadoc:
返回一个新的字符序列,它是该序列的子序列。
调用表单的这个方法
str.subSequence(begin, end)
行为方式与调用完全相同
str.substring(begin, end)
定义此方法以便 String 类可以实现 CharSequence 接口。
谁能解释一下?
String.subSequence()
有以下javadoc:
返回一个新的字符序列,它是该序列的子序列。
调用表单的这个方法
str.subSequence(begin, end)
行为方式与调用完全相同
str.substring(begin, end)
定义此方法以便 String 类可以实现 CharSequence 接口。
谁能解释一下?
要理解这一点,您首先需要知道的是子字符串和子序列之间有什么区别
子字符串是字符串的连续部分或子部分
然而
子序列是字符串或序列的一部分,可能是连续的或不连续的,但元素的顺序保持不变
例如,假设我们有以下字符串:
str_a="hello there"
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 中没有关于这些方法的适当说明。
子序列
子序列是子字符串、后缀和前缀的概括。找到两个或多个字符串的子序列的最长字符串称为最长公共子序列问题。
示例:字符串“anna”是字符串“banana”的子序列:
banana
|| ||
an na
子串
字符串的子串是字符串后缀的前缀,相当于前缀的后缀。如果一个字符串是另一个字符串的子字符串,那么它也是一个子序列,这是一个更一般的概念。
示例:字符串“ana”是香蕉在两个不同偏移量处的子字符串(和子序列):
banana
|||||
ana||
|||
ana
在这里阅读更多。
但就 Java 而言,它们的使用没有任何区别,如javadoc中明确说明的那样。同样正如其中所述,该方法subSequence
仅在类中实现,String
以使其与CharSequence
接口兼容。而且这个方法的名字确实是用词不当。
Usingstr.subSequence(begin, end)
返回一个CharSequence,它是表示为字符序列的字符串的只读形式。例如:
String string = "Hello";
CharSequence subSequence = string.subSequence(0, 5);
chars
它只是在CharSequence
不实例化 a 的新实例的情况下无法更改的意义上读取的CharSequence
。
如果必须使用str.subSequence(begin, end)
,可以将结果转换为String
:
String string = "Hello";
String subSequence = (String) string.subSequence(0, 5);
并使用所有普通String
运算符,例如subSequence += " World";
简单的理解:
子字符串:子字符串是字符串中连续的字符序列,其中 oder 很重要。
Substring
string
ring
Subsequences:从一个字符串,任何字符,但按顺序。
Substring
u s i
s b t i n g
r g
子串是连续的子序列。
例如,对于序列 abc,我们有
substrings: a, ab, abc, b, bc, c, and the empty substring;
subsequences: a, b, ab, c, ac, bc, abc, and the empty subsequence.
当字母重复时,一些子串和子序列看起来是一样的。
如果你看一下String的来源,你会看到子序列实际上调用了子字符串。它与子字符串唯一不同的是它将字符串转换为 CharSequence。
简而言之,它对对象来说并不重要String
。它们是等价的,除非您需要将结果传递给只需要 的东西String
,在这种情况下,您必须使用subtring(int,int)
版本或将subsequence(int,int)
版本转换为 a String
(因为它是内部的)。
String.substring(int,int)
先存在,因为String
先存在。在 Java 1.4CharSequence
中添加了,显然有人意识到在那里拥有相同的功能会很有用,但返回的是 aCharSequence
而不是String
(为了灵活性)。于是,随之而来CharSequence.subSequence(int,int)
。但是,自从String
implements CharSequence
,String
继承了看似多余的方法。
基本上它就是返回的内容。一个是 String,另一个是 CharSequence(您可以将其转换为字符串)。
当您需要 CharSequence 类型的变量时,您将使用 subSequence。