Extraire la sous-chaîne d’une chaîne

Quelle est la meilleure façon d’extraire une souschaîne d’une chaîne dans Android?

Si vous connaissez l’index de début et de fin, vous pouvez utiliser

Ssortingng substr=mysourcessortingng.subssortingng(startIndex,endIndex); 

Si vous voulez obtenir une sous-chaîne d’un index spécifique jusqu’à la fin, vous pouvez utiliser:

 Ssortingng substr=mysourcessortingng.subssortingng(startIndex); 

Si vous voulez obtenir une sous-chaîne d’un caractère spécifique jusqu’à la fin, vous pouvez utiliser:

 Ssortingng substr=mysourcessortingng.subssortingng(mysourcessortingng.indexOf("characterValue")); 

Si vous voulez obtenir une sous-chaîne après un caractère spécifique, ajoutez ce numéro à .indexOf(char) :

 Ssortingng substr=mysourcessortingng.subssortingng(mysourcessortingng.indexOf("characterValue") + 1); 

subssortingng() :

 str.subssortingng(startIndex, endIndex); 

Voici un exemple concret:

 Ssortingng hallossortingng = "hallo"; Ssortingng asubssortingng = hallossortingng.subssortingng(0, 1); 

Dans l’exemple, asubssortingng renverrait: h

Il y a un autre moyen, si vous voulez obtenir une sous-chaîne avant et après un caractère

 Ssortingng s ="123dance456"; Ssortingng[] split = s.split("dance"); Ssortingng firstSubSsortingng = split[0]; Ssortingng secondSubSsortingng = split[1]; 

vérifier ce post- comment trouver avant et après la sous-chaîne dans une chaîne

utiliser le texte de la classe de texte d’Android:
TextUtils.subssortingng (charsequence source, int start, int end)

Vous pouvez utiliser subSequence, c’est la même chose que substr en C

  Str.subSequence(int Start , int End) 

vous pouvez utiliser ce code

  public static Ssortingng getSubSsortingng(Ssortingng mainSsortingng, Ssortingng lastSsortingng, Ssortingng startSsortingng) { Ssortingng endSsortingng = ""; int endIndex = mainSsortingng.indexOf(lastSsortingng); int startIndex = mainSsortingng.indexOf(startSsortingng); Log.d("message", "" + mainSsortingng.subssortingng(startIndex, endIndex)); endSsortingng = mainSsortingng.subssortingng(startIndex, endIndex); return endSsortingng; } 

dans cette mainSsortingng y a une super chaîne. comme “I_AmANDROID.Devloper” et lastSsortingng est une chaîne comme “.” et startSsortingng est comme “_”. donc cette function renvoie “AmANDROID”. profiter de votre temps de code. 🙂

subssortingng(int startIndex, int endIndex)

Si vous ne spécifiez pas endIndex , la méthode renverra tous les caractères de startIndex .

startIndex: l’index de départ est inclusif

endIndex: l’index de fin est exclusif

Exemple:

Ssortingng str = "abcdefgh"

str.subssortingng(0, 4) => abcd

str.subssortingng(4, 6) => ef

str.subssortingng(6) => gh

La meilleure façon d’obtenir la sous-chaîne dans Android consiste à utiliser (comme @ user2503849 dit) la TextUtlis.subssortingng(CharSequence, int, int) . Je peux expliquer pourquoi. Si vous regardez la Ssortingng.subssortingng(int, int) de android.jar (la plus récente API 22), vous verrez:

 public Ssortingng subssortingng(int start) { if (start == 0) { return this; } if (start >= 0 && start <= count) { return new String(offset + start, count - start, value); } throw indexAndLength(start); } 

Ok, que ... Comment pensez-vous que le constructeur privé Ssortingng(int, int, char[]) ressemble?

 Ssortingng(int offset, int charCount, char[] chars) { this.value = chars; this.offset = offset; this.count = charCount; } 

Comme nous pouvons le voir, il fait référence à "l'ancien" tableau de valeurs char[] . Donc, le GC ne peut pas le libérer.

Dans le dernier Java, il a été corrigé:

 Ssortingng(int offset, int charCount, char[] chars) { this.value = Arrays.copyOfRange(chars, offset, offset + charCount); this.offset = offset; this.count = charCount; } 

Arrays.copyOfRange(...) utilise la copie de tableau native à l'intérieur.

C'est tout 🙂

Meilleures salutations!