Extract substring from a string

后端 未结 10 1959
栀梦
栀梦 2020-12-02 19:55

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

10条回答
  •  孤街浪徒
    2020-12-02 20:03

    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!

提交回复
热议问题