Метод Java substring
завершается неудачно, когда вы пытаетесь получить подстроку, начинающуюся с индекса, который длиннее строки.
Легкой альтернативой является использование Apache Commons StringUtils.substring
:
public static String substring(String str, int start)
Gets a substring from the specified String avoiding exceptions.
A negative start position can be used to start n characters from the end of the String.
A null String will return null. An empty ("") String will return "".
StringUtils.substring(null, *) = null
StringUtils.substring("", *) = ""
StringUtils.substring("abc", 0) = "abc"
StringUtils.substring("abc", 2) = "c"
StringUtils.substring("abc", 4) = ""
StringUtils.substring("abc", -2) = "bc"
StringUtils.substring("abc", -4) = "abc"
Parameters:
str - the String to get the substring from, may be null
start - the position to start from, negative means count back from the end of the String by this many characters
Returns:
substring from start position, null if null String input
Обратите внимание: если по какой-то причине вы не можете использовать Apache Commons lib, вы можете просто получить нужные вам части из источника
<code>// Substring
//-----------------------------------------------------------------------
/**
* <p>Gets a substring from the specified String avoiding exceptions.</p>
*
* <p>A negative start position can be used to start {@code n}
* characters from the end of the String.</p>
*
* <p>A {@code null} String will return {@code null}.
* An empty ("") String will return "".</p>
*
* <pre>
* StringUtils.substring(null, *) = null
* StringUtils.substring("", *) = ""
* StringUtils.substring("abc", 0) = "abc"
* StringUtils.substring("abc", 2) = "c"
* StringUtils.substring("abc", 4) = ""
* StringUtils.substring("abc", -2) = "bc"
* StringUtils.substring("abc", -4) = "abc"
*
*
* @param str String для получения подстроки, может быть нулевым
* @param start позиция для начала, отрицательное значение
* отсчитывать от конца строки по этому количеству символов
* @ возвратить подстроку из начальной позиции, {@code null}, если нулевой ввод String
* /
public static String подстрока (final String str, int start) {
if (str == null) {
вернуть ноль;
}
// обрабатывать негативы, что означает последние n символов
if (start <0) {
start = str.length () + start; // помните начало отрицательно
}
if (start <0) {
начало = 0;
}
if (start> str.length ()) {
вернуть ПУСТОЙ;
}
вернуть str.substring (начало);
}