Другие предлагают использовать:
s.split("\\s+").length
Однако есть осложнения при использовании split
. В частности, приведенное выше даст неправильные ответы для строк с пробелами. Даже если эти проблемы устранены, это все равно слишком дорого, поскольку мы создаем count
новых строк и массив для их хранения.
Мы можем реализовать countSegments
напрямую, выполняя итерацию по строке и подсчитывая количество раз, которое мы go переходим от непробельного символа к пробелу или концу строки:
public static int countSegments(String s)
{
int count = 0;
for(int i=1; i<=s.length(); i++)
{
if((s.charAt(i-1) != ' ') && (i == s.length() || s.charAt(i) == ' ')) count++;
}
return count;
}
Тест:
for(String s : new String[] {"", " ", "a", " a", "a ", " a ", ", , , , a, eaefa"})
System.out.format("<%s> : %d%n", s, countSegments(s));
Выход:
<> : 0
< > : 0
<a> : 1
< a> : 1
<a > : 1
< a > : 1
<, , , , a, eaefa> : 6