quelle est la meilleure façon d'extraire une sous-chaîne d'une chaîne dans Android?
Si vous connaissez les index de début et de fin, vous pouvez utiliser
String substr=mysourcestring.substring(startIndex,endIndex);
Si vous voulez obtenir une sous-chaîne d'un index spécifique jusqu'à la fin, vous pouvez utiliser:
String substr=mysourcestring.substring(startIndex);
Si vous voulez obtenir une sous-chaîne d'un caractère spécifique jusqu'à la fin, vous pouvez utiliser:
String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue"));
Si vous voulez obtenir une sous-chaîne à partir de after d'un caractère spécifique, ajoutez ce nombre à .indexOf(char)
:
String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);
str.substring(startIndex, endIndex);
Voici un exemple du monde réel:
String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1);
Dans l'exemple asubstring retournera: h
Il existe un autre moyen, si vous voulez obtenir une sous-chaîne avant et après un caractère
String s ="123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];
vérifier cette post- comment trouver avant et après sous-chaîne dans une chaîne
Vous pouvez utiliser subSequence, c'est la même chose que substr en C
Str.subSequence(int Start , int End)
utiliser le texte indicibles classe d'Android:TextUtils.substring (charsequence source, int start, int end)
vous pouvez utiliser ce code
public static String getSubString(String mainString, String lastString, String startString) {
String endString = "";
int endIndex = mainString.indexOf(lastString);
int startIndex = mainString.indexOf(startString);
Log.d("message", "" + mainString.substring(startIndex, endIndex));
endString = mainString.substring(startIndex, endIndex);
return endString;
}
dans this mainString
est un Super string.like "I_AmANDROID.Devloper" et lastString
est une chaîne du type "." et startString est comme "_" . alors ce function
renvoie "AmANDROID" . profitez de votre temps de code. :)
Le meilleur moyen d'obtenir une sous-chaîne dans Android consiste à utiliser (comme @ user2503849) la méthode TextUtlis.substring(CharSequence, int, int)
. Je peux expliquer pourquoi. Si vous jetez un coup d'œil à la méthode String.substring(int, int)
de Android.jar
(dernière API 22), vous verrez:
public String substring(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 ... A quoi ressemble le constructeur privé String(int, int, char[])
?
String(int offset, int charCount, char[] chars) {
this.value = chars;
this.offset = offset;
this.count = charCount;
}
Comme nous pouvons le constater, il conserve une référence à la "vieille" valeur char[]
. Donc, le GC ne peut pas le libérer.
Dans le dernier Java, cela a été corrigé:
String(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 natif à l'intérieur.
C'est tout :)
Meilleures salutations!
Lors de la recherche de plusieurs occurrences d'une sous-chaîne correspondant à un motif
String input_string = "foo/adsfasdf/adf/bar/erqwer/";
String regex = "(foo/|bar/)"; // Matches 'foo/' and 'bar/'
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input_string);
while(matcher.find()) {
String str_matched = input_string.substring(matcher.start(), matcher.end());
// Do something with a match found
}