String.subSequence()
には次のjavadocがあります。
このシーケンスのサブシーケンスである新しい文字シーケンスを返します。
この形式のメソッドの呼び出し
str.subSequence(begin, end)
呼び出しとまったく同じように動作します
str.substring(begin, end)
このメソッドは、StringクラスがCharSequenceインターフェースを実装できるように定義されています。
誰か説明できますか?
str.subSequence(begin, end)
を使用すると、 CharSequence が返されます。これは、charのシーケンスとして表される文字列の読み取り専用形式です。例えば:
_String string = "Hello";
CharSequence subSequence = s.subSequence(0, 5);
_
chars
の新しいインスタンスをインスタンス化せずにCharSequence
内のCharSequence
を変更できないという意味でのみ読み取られます。
str.subSequence(begin, end)
を使用する必要がある場合は、結果をString
にキャストできます。
_String string = "Hello";
String subSequence = (String) s.subSequence(0, 5);
_
_subSequence += " World";
_のような通常のString
演算子をすべて使用します
Subsequence
サブシーケンスは、サブストリング、サフィックス、およびプレフィックスの一般化です。 2つ以上の文字列のサブシーケンスである最長の文字列を見つけることは、最も長い共通のサブシーケンス問題として知られています。
例:文字列「anna」は、文字列「banana」のサブシーケンスです。
banana
|| ||
an na
Substring
文字列の部分文字列は、文字列の接尾辞の接頭辞であり、同等に接頭辞の接尾辞です。あるストリングが別のストリングのサブストリングである場合、それはサブシーケンスでもあり、これはより一般的な概念です。
例:文字列「ana」は、2つの異なるオフセットでのバナナの部分文字列(および部分列)です。
banana
|||||
ana||
|||
ana
続きを読む こちら 。
しかし、Javaに関する限り、 javadoc で明確に述べられているように、それらの使用法に違いはありません。また、そこに述べられているように、メソッドsubSequence
は、String
インターフェースに準拠するために、クラスCharSequence
にのみ実装されており、このメソッドの名前は実際には単なる誤称です。
これを理解するために最初に知っておく必要があるのは、substringとsubsequenceの違いは何ですか?
substringは、文字列のcontinuousパートまたはサブパートです
一方
subsequenceは文字列またはシーケンスの一部であり、連続的であってもなくてもかまいませんが、要素のorderは維持されます
たとえば、次の文字列があるとします。
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
のサブストリングではありません。このサブストリングはcontinuousではありません。
これで、順序が維持されるため、すべての部分文字列は部分列になります。
str_d
はstr_a
のサブシーケンスであり、str_e
もstr_a
のサブシーケンスですが、str_f
はstr_a
のサブシーケンスではありませんorderは維持されません。
現在、Javaについては、これらのメソッドに関する適切な説明がjavadocにありません。
理解の簡単な言葉で:
Substring:部分文字列は、文字列内の連続する文字のシーケンスであり、順序が重要です。
Substring
string
ring
Subsequences:文字列から、任意の文字を除く。
Substring
u s i
s b t i n g
r g
文字列のソースを見ると、サブシーケンスが実際に部分文字列を呼び出していることがわかります。サブストリングとの唯一の違いは、ストリングをCharSequenceにキャストすることです。
要するに、String
オブジェクトの場合はそれほど重要ではありません。 String
のみを受け取るものに結果を渡す必要がない限り、これらは同等です。その場合、subtring(int,int)
バージョンを使用するか、subsequence(int,int)
バージョンをキャストする必要がありますa String
(それが内部的にそういうものだからです)。
String
が最初に存在したため、String.substring(int,int)
が最初に存在しました。 Java 1.4では、CharSequence
が追加されました。同じ機能を使用すると便利であるが、代わりにCharSequence
を返すString
(柔軟性を確保するため)CharSequence.subSequence(int,int)
が登場しましたが、String
はCharSequence
を実装しているため、String
は冗長に見える方法。
サブストリングは連続したサブシーケンスです。
たとえば、シーケンスabcの場合、
substrings: a, ab, abc, b, bc, c, and the empty substring;
subsequences: a, b, ab, c, ac, bc, abc, and the empty subsequence.
文字が繰り返されると、一部のサブストリングとサブシーケンスは同じに見えます。