web-dev-qa-db-fra.com

Extraire une sous-chaîne d'une chaîne

quelle est la meilleure façon d'extraire une sous-chaîne d'une chaîne dans Android?

63
Moe

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);
117
Kartik Domadiya

substring()

str.substring(startIndex, endIndex); 
77
Mitch Wheat

Voici un exemple du monde réel:

String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1); 

Dans l'exemple asubstring retournera: h

22
gpwr

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

9
Shainu Thomas

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

 Str.subSequence(int Start , int End)
3
Soheil

utiliser le texte indicibles classe d'Android:
TextUtils.substring (charsequence source, int start, int end)

3
user2503849

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. :)

3
John smith

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!

0
ddmytrenko

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
    }
0
Matt