String.subSequence()
a le javadoc suivant:
Renvoie une nouvelle séquence de caractères qui est une sous-séquence de cette séquence.
Une invocation de cette méthode du formulaire
str.subSequence(begin, end)
se comporte exactement de la même manière que l'invocation
str.substring(begin, end)
Cette méthode est définie de sorte que la classe String puisse implémenter l'interface CharSequence.
Quelqu'un peut-il expliquer?
L'utilisation de str.subSequence(begin, end)
renvoie un CharSequence qui est une forme en lecture seule de la chaîne représentée comme une séquence de caractères. Par exemple:
String string = "Hello";
CharSequence subSequence = s.subSequence(0, 5);
Il est en lecture seule dans le sens où vous ne pouvez pas modifier le chars
dans le CharSequence
sans instancier une nouvelle instance d'un CharSequence
.
Si vous devez utiliser str.subSequence(begin, end)
, vous pouvez convertir le résultat en String
:
String string = "Hello";
String subSequence = (String) s.subSequence(0, 5);
et utilisez tous les opérateurs String
normaux comme subSequence += " World";
Suite
La suite est une généralisation de la sous-chaîne, du suffixe et du préfixe. La recherche de la chaîne la plus longue qui est une sous-séquence de deux chaînes ou plus est connue comme le problème de sous-séquence commun le plus long.
Exemple: La chaîne "anna" est une sous-séquence de la chaîne "banana":
banana
|| ||
an na
Sous-chaîne
Une sous-chaîne d'une chaîne est un préfixe d'un suffixe de la chaîne, et de manière équivalente un suffixe d'un préfixe. Si une chaîne est une sous-chaîne d'une autre, c'est aussi une sous-séquence, ce qui est un concept plus général.
Exemple: La chaîne "ana" est une sous-chaîne (et une sous-séquence) de banane à deux décalages différents:
banana
|||||
ana||
|||
ana
En savoir plus ici .
Mais en ce qui concerne Java est concerné, il n'y a pas de différence dans leur utilisation, comme indiqué clairement dans javadoc . De plus, comme indiqué ici, la méthode subSequence
n'a été implémenté que dans la classe String
afin de rester compatible avec l'interface CharSequence
. Et le nom de cette méthode n'est en effet qu'un terme impropre.
Pour comprendre cela, la toute première chose que vous devez savoir est la différence entre sous-chaîne et sous-séquence
sous-chaîne est une partie ou sous-partie continue d'une chaîne
tandis que
sous-séquence est la partie d'une chaîne ou d'une séquence, qui peut être continue ou non mais l'ordre des éléments est maintenu
Par exemple, disons que nous avons les chaînes suivantes:
str_a="hello there"
str_b="hello"
str_c="Ello th"
str_d="hllo"
str_e="ho hre"
str_f="there hello"
str_b
est une sous-chaîne de str_a
, str_c
est également une sous-chaîne de str_a
mais str_d
n'est pas une sous-chaîne de str_a
car cette sous-chaîne n'est pas continue .
Maintenant, toutes les sous-chaînes sont des sous-séquences lorsque l'ordre est maintenu.
str_d
est une sous-séquence de str_a
, str_e
est également une sous-séquence de str_a
cependant str_f
n'est pas une sous-séquence de str_a
comme dans ce cas, l'ordre n'est pas maintenu.
Maintenant pour Java, il n'y a pas de clarification appropriée concernant ces méthodes dans javadoc.
En termes simples de compréhension:
Substring: Une sous-chaîne est une séquence contiguë de caractères dans une chaîne, où plus importe.
Substring
string
ring
Subsequences: À partir d'une chaîne, n'importe quel caractère mais en séquence.
Substring
u s i
s b t i n g
r g
Si vous regardez la source de String, vous verrez que la sous-séquence appelle réellement substring. La seule chose qu'il fait différemment de la sous-chaîne, c'est qu'il convertit la chaîne en une CharSequence.
En bref, cela n'a pas beaucoup d'importance pour les objets String
. Ils sont équivalents, sauf si vous devez passer le résultat à quelque chose qui ne prend que String
, auquel cas vous devez utiliser la version subtring(int,int)
ou convertir la version subsequence(int,int)
en un String
(parce que c'est ce que c'est, en interne).
String.substring(int,int)
existait en premier, car String
existait en premier. Dans Java 1.4, CharSequence
a été ajouté, et quelqu'un s'est apparemment rendu compte qu'il serait utile d'y avoir la même fonctionnalité, mais qui a renvoyé un CharSequence
au lieu de String
(pour plus de flexibilité). Donc, CharSequence.subSequence(int,int)
. Cependant, puisque String
implémente CharSequence
, String
a hérité de l'apparence redondante méthode.
Les sous-chaînes sont des sous-séquences consécutives.
Par exemple, pour la séquence abc, nous avons
substrings: a, ab, abc, b, bc, c, and the empty substring;
subsequences: a, b, ab, c, ac, bc, abc, and the empty subsequence.
Lorsque les lettres sont répétées, certaines sous-chaînes et sous-séquences se ressemblent.