androidの文字列から部分文字列を抽出する最良の方法は何ですか?
開始インデックスと終了インデックスがわかっている場合は、使用できます
String substr=mysourcestring.substring(startIndex,endIndex);
特定のインデックスから最後まで部分文字列を取得する場合は、次を使用できます。
String substr=mysourcestring.substring(startIndex);
特定の文字から最後まで部分文字列を取得する場合は、次を使用できます。
String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue"));
after特定の文字から部分文字列を取得する場合は、その番号を.indexOf(char)
に追加します。
String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);
str.substring(startIndex, endIndex);
これが実際の例です:
String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1);
例ではasubstringは以下を返します:h
文字の前後にサブ文字列を取得したい場合は、別の方法があります
String s ="123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];
この投稿を確認してください- 文字列の部分文字列の前後を見つける方法
substring(int startIndex, int endIndex)
endIndexを指定しない場合、メソッドはstartIndexからすべての文字を返します。
startIndex:開始インデックスは含まれます
endIndex:終了インデックスは排他的です
例:
String str = "abcdefgh"
str.substring(0, 4)
=> abcd
str.substring(4, 6)
=> ef
str.substring(6)
=> gh
SubSequenceを使用できます。これはCのsubstrと同じです
Str.subSequence(int Start , int End)
androidの未定クラスを使用します。TextUtils.substring (charsequence source, int start, int end)
このコードを使用できます
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
はスーパーストリングです。「I_AmANDROID.Devloper」とlastString
はストリングライクです。 startStringは「_」のようなものです。したがって、このfunction
は「AmANDROID」を返します。コード時間をお楽しみください。:)
Androidのサブストリングを取得する最良の方法は、(@ user2503849が言ったように)TextUtlis.substring(CharSequence, int, int)
メソッドを使用することです。理由を説明できます。 Android.jar
(最新のAPI 22)のString.substring(int, int)
メソッドを見ると、次のように表示されます。
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、より...プライベートコンストラクタString(int, int, char[])
はどのように見えると思いますか?
String(int offset, int charCount, char[] chars) {
this.value = chars;
this.offset = offset;
this.count = charCount;
}
ご覧のとおり、「古い」値char[]
配列への参照を保持しています。そのため、GCはそれを解放できません。
最新のJavaでは修正されました:
String(int offset, int charCount, char[] chars) {
this.value = Arrays.copyOfRange(chars, offset, offset + charCount);
this.offset = offset;
this.count = charCount;
}
Arrays.copyOfRange(...)
は、内部でネイティブ配列コピーを使用します。
それでおしまい :)
宜しくお願いします!
パターンに一致する部分文字列の複数の出現を見つけるとき
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
}