web-dev-qa-db-fra.com

Quelle est la différence entre String.subString () et String.subSequence ()

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?

24

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";

23
Sam

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.

41
Amar

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.

26
Nishchay

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
4
user3133925

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.

1
Bogoth

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.

1
Christopher

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.

0
Rishav Bhurtel