web-dev-qa-db-ja.com

文字列から部分文字列を抽出する

androidの文字列から部分文字列を抽出する最良の方法は何ですか?

65
Moe

開始インデックスと終了インデックスがわかっている場合は、使用できます

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

substring()

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

これが実際の例です:

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

例ではasubstringは以下を返します:h

26
gpwr

文字の前後にサブ文字列を取得したい場合は、別の方法があります

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

この投稿を確認してください- 文字列の部分文字列の前後を見つける方法

13
Shainu Thomas

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

6
sHOLE

SubSequenceを使用できます。これはCのsubstrと同じです

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

androidの未定クラスを使用します。
TextUtils.substring (charsequence source, int start, int end)

3
user2503849

このコードを使用できます

    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」を返します。コード時間をお楽しみください。:)

3
John smith

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(...)は、内部でネイティブ配列コピーを使用します。

それでおしまい :)

宜しくお願いします!

0
ddmytrenko

パターンに一致する部分文字列の複数の出現を見つけるとき

    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