How to use .substring method to start at an index

2019-03-01 14:44发布

问题:

so I'm parsing html and I'm trying to create a substring starting at a certain location and stop 941 characters after that. The way the .substring method in Java works is you have to give it a start location and a end location but the end location needs to be a location on the original string after the start.

String html = "This is a test string for example";
html.substring(html.indexOf("test"), 6);

This is an example of how I would like the code to work, it would make a substring starting at test and stop after 7 characters returning "test string". However if I use this code I get a indexOutOfBounds exception because 6 is before test. Working code would be the following

String html = "This is a test string for example";
html.substring(html.indexOf("test"), 22);

Which would return "test string". But I don't know what the last number is going to be since the html is always changing. SO THE QUESTION IS what do I have to do so that I can start a specific location and end a x amount of characters after it? Any help would be much appreciated! Thanks!

回答1:

Since the second parameter is an index, not the length, you need to store the initial position, and add the length to it, like this:

String html = "This is a test string for example";
int pos = html.indexOf("test");
String res = html.substring(pos, pos+11);

Demo.



回答2:

Please refer to the String.substring source.

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    if (endIndex > value.length) {
        throw new StringIndexOutOfBoundsException(endIndex);
    }
    int subLen = endIndex - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return ((beginIndex == 0) && (endIndex == value.length)) ? this
            : new String(value, beginIndex, subLen);
}

in this source (line 8~9), second parameter bigger than first parameter.

you will need to edit this.

String html = "This is a test string for example";
html.substring(html.indexOf("test"), (6+html.indexOf("test")));

hopefully, that will solve the problem.