was ist der beste Weg, einen Teilstring aus einem String in Android zu extrahieren?
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);
str.substring(startIndex, endIndex);
Hier ist ein reales Beispiel:
String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1);
Im Beispiel würde asubstring zurückkommen: h
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
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
Sie können subSequence verwenden, es ist dasselbe wie substr in C
Str.subSequence(int Start , int End)
verwenden Sie Text-Untold-Klasse von Android:TextUtils.substring (charsequence source, int start, int end)
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. :)
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!
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
}