2013-12-12 2 views
3

Извините, если это глупый вопрос, но я не могу найти объяснения.Почему привязка к String.trim() выбрасывает исключение?

У меня есть строка, как это:

String str ="This is 50 test. Try it !!"; 

Я хочу, чтобы получить число раз перед test.

Если я:

str = str.substring(0, str.indexOf("test")).trim(); 
str = str.substring(str.lastIndexOf(" ")).trim(); 
System.out.println(str); 

я получаю: "50"

Однако, если я это сделать:

str = str.substring(0, str.indexOf("test")).trim().substring(str.lastIndexOf(" ")).trim(); 

я получаю: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -13

Так как trim() возвращает копию строка, ведущая и конечная пробел опущен, почему это исключение выбрано? Почему я не могу подключить свои методы к str? Я не понимаю.

ответ

12
str = str.substring(0, str.indexOf("test")).trim().substring(str.lastIndexOf(" ")).trim(); 
                  ^

str Это относится к оригинальной строки.


str = str.substring(0, str.indexOf("test")).trim(); // first operation 
str = str.substring(str.lastIndexOf(" ")).trim(); 
        ^

str Это относится к строке после того, как первая операция применяется. Следовательно, оба подхода не эквивалентны.

+1

Ahh, спасибо. Понял ! – user2336315

Смежные вопросы