Хотя метод @ xehpuk хорош, если вы хотите избежать использования регулярных выражений, он имеет O (n ^ 2) временную сложность. Следующее решение также избегает регулярных выражений, но является O (n):
if(s.length() == 0)
return "";
char left = s.charAt(0);
char right = s.charAt(s.length() - 1);
int leftWhitespace = 0;
int rightWhitespace = 0;
boolean leftBeforeRight = leftWhitespace < s.length() - 1 - rightWhitespace;
while ((left == ' ' || right == ' ') && leftBeforeRight) {
if(left == ' ') {
leftWhitespace++;
left = s.charAt(leftWhitespace);
}
if(right == ' ') {
rightWhitespace++;
right = s.charAt(s.length() - 1 - rightWhitespace);
}
leftBeforeRight = leftWhitespace < s.length() - 1 - rightWhitespace;
}
String result = s.substring(leftWhitespace, s.length() - rightWhitespace);
return result.equals(" ") ? "" : result;
Это подсчитывает количество конечных пробелов в начале и конце строки, пока не встретятся индексы «влево» и «вправо», полученные из счетчиков пробелов, или пока оба индекса не достигнут непробельного символа. После этого мы либо возвращаем подстроку, полученную с использованием счетчиков пробелов, либо пустую строку, если результатом является пробел (необходим для учета строк со всеми пробелами с нечетным количеством символов).