web-dev-qa-db-ger.com

Teilstring aus einem String extrahieren

was ist der beste Weg, einen Teilstring aus einem String in Android zu extrahieren?

63
Moe

Wenn Sie den Start- und Endindex kennen, können Sie verwenden 

String substr=mysourcestring.substring(startIndex,endIndex);

Wenn Sie einen Teilstring von einem bestimmten Index bis zum Ende erhalten möchten, können Sie Folgendes verwenden:

String substr=mysourcestring.substring(startIndex);

Wenn Sie einen Teilstring von einem bestimmten Zeichen bis zum Ende erhalten möchten, können Sie Folgendes verwenden:

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue"));

Wenn Sie einen Teilstring von after einem bestimmten Zeichen erhalten möchten, fügen Sie diese Nummer zu .indexOf(char) hinzu:

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);
117
Kartik Domadiya

substring()

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

Hier ist ein reales Beispiel:

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

Im Beispiel würde asubstring zurückkommen: h

22
gpwr

Es gibt einen anderen Weg, wenn Sie vor und nach einem Zeichen eine Unterzeichenfolge erhalten möchten

String s ="123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];

überprüfe diesen post- wie finde ich vor und nach dem sub-String in einem String

9
Shainu Thomas

substring(int startIndex, int endIndex)

Wenn Sie endIndex nicht angeben, gibt die Methode alle Zeichen von startIndex zurück.

startIndex: Startindex ist inklusive

endIndex: Der Endindex ist exklusiv

Beispiel:

String str = "abcdefgh"

str.substring(0, 4) => abcd

str.substring(4, 6) => ef

str.substring(6) => gh

6
sHOLE

Sie können subSequence verwenden, es ist dasselbe wie substr in C

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

verwenden Sie Text-Untold-Klasse von Android:
TextUtils.substring (charsequence source, int start, int end)

3
user2503849

sie können diesen Code verwenden

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

mainString ist in diesem Fall eine Superzeichenfolge wie "I_AmANDROID.Devloper" und lastString ist eine Zeichenfolge wie "." und startString ist wie "_" . so function gibt "AMANDROID" . viel Spaß beim Code. :)

3
John smith

Die beste Möglichkeit, eine Unterzeichenfolge in Android zu erhalten, ist die Verwendung von TextUtlis.substring(CharSequence, int, int) (wie @ user2503849 gesagt). Ich kann erklären warum. Wenn Sie die String.substring(int, int)-Methode aus Android.jar (neueste API 22) betrachten, sehen Sie Folgendes:

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, als ... Wie sieht der private Konstruktor String(int, int, char[]) aus?

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

Wie wir sehen, verweist es auf den "alten" char[]-Array. Der GC kann es also nicht freigeben.

In der neuesten Java wurde es behoben:

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

Arrays.copyOfRange(...) verwendet das native Array-Kopieren.

Das ist es :)

Freundliche Grüße!

0
ddmytrenko

Wenn mehrere Vorkommen einer Teilzeichenfolge gefunden werden, die mit einem Muster übereinstimmt

    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