Extract substring from a string

AndroidStringSubstring

Android Problem Overview


what is the best way to extract a substring from a string in android?

Android Solutions


Solution 1 - Android

If you know the Start and End index, you can use

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

If you want to get substring from specific index till end you can use :

String substr=mysourcestring.substring(startIndex);

If you want to get substring from specific character till end you can use :

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

If you want to get substring from after a specific character, add that number to .indexOf(char):

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

Solution 2 - Android

substring():

str.substring(startIndex, endIndex); 

Solution 3 - Android

Here is a real world example:

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

In the example asubstring would return: h

Solution 4 - Android

There is another way , if you want to get sub string before and after a character

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

check this post- https://stackoverflow.com/questions/8871682/how-to-find-before-and-after-sub-string-in-a-string

Solution 5 - Android

substring(int startIndex, int endIndex)

> If you don't specify endIndex, the method will return all the > characters from startIndex. > > startIndex : starting index is inclusive > > endIndex : ending index is exclusive

Example:

String str = "abcdefgh"

str.substring(0, 4) => abcd

str.substring(4, 6) => ef

str.substring(6) => gh

Solution 6 - Android

you can use this 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;
}

in this mainString is a Super string.like "I_AmANDROID.Devloper" and lastString is a string like"." and startString is like"_". so this function returns "AmANDROID". enjoy your code time.:)

Solution 7 - Android

use text untold class from android:
TextUtils.substring (charsequence source, int start, int end)

Solution 8 - Android

You can use subSequence , it's same as substr in C

 Str.subSequence(int Start , int End)

Solution 9 - Android

When finding multiple occurrences of a substring matching a pattern

    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
    }

Solution 10 - Android

The best way to get substring in Android is using (as @user2503849 said) TextUtlis.substring(CharSequence, int, int) method. I can explain why. If you will take a look at the String.substring(int, int) method from android.jar (newest API 22), you will see:

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, than... How do you think the private constructor String(int, int, char[]) looks like?

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

As we can see it keeps reference to the "old" value char[] array. So, the GC can not free it.

In the newest Java it was fixed:

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

Arrays.copyOfRange(...) uses native array copying inside.

That's it :)

Best regards!

Solution 11 - Android

All of The responders gave good answers. However, I am giving you all relatable methods for this so that any one can get from one place, I'll edit my answer if I find something new.

  1. substring(0)- use for cut string from given specific char.

  2. Substring(0,2)- give you sub string from starting(0) and ending(2) characters.

  3. Split("NAME")- return you string in two parts first is that you use in split "NAME" and another part is rest of string combine.

  4. subSequence(0,3) - returns sequence of give start(0) and ending index(3).

    This one is not specifically use for split string but though it may be use full for some one

  5. startswith("A",3)- returns string for specific starting character.

    For example:

    String s = "StackOverflow";
    String[] split = s.split("Stack");
    
    System.out.println("STRING NAME:"+s.substring(2));
    System.out.println("STRING NAME:"+s.substring(2,3));
    System.out.println("STRING NAME:"+split[1]);
    System.out.println("STRING NAME:"+split[0]);
    System.out.println("STRING NAME:"+s.subSequence(2,5));
    

    Output:

     1)ackOverflow
     2)a
     3)Overflow
     4)stack
     5)ack
    

I hope this will give you enough information that you require.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMoeView Question on Stackoverflow
Solution 1 - AndroidKartik DomadiyaView Answer on Stackoverflow
Solution 2 - AndroidMitch WheatView Answer on Stackoverflow
Solution 3 - AndroidgpwrView Answer on Stackoverflow
Solution 4 - AndroidShainu ThomasView Answer on Stackoverflow
Solution 5 - AndroidsHOLEView Answer on Stackoverflow
Solution 6 - AndroidJohn smithView Answer on Stackoverflow
Solution 7 - Androiduser2503849View Answer on Stackoverflow
Solution 8 - AndroidSoheilView Answer on Stackoverflow
Solution 9 - AndroidMattView Answer on Stackoverflow
Solution 10 - AndroidddmytrenkoView Answer on Stackoverflow
Solution 11 - AndroidKesh StarkView Answer on Stackoverflow