Мне кажется странным, почему spaceCount не складывается, когда выражение равно "12 + 1". Я получаю вывод 0 для spaceCount, хотя это должно быть 2. Любое понимание будет оценено!
public int countSpaces(String expr) {
String tok = expr;
int spaceCount = 0;
String delimiters = "+-*/#! ";
StringTokenizer st = new StringTokenizer(expr, delimiters, true);
while (st.hasMoreTokens()) {
if ((tok = st.nextToken()).equals(" ")) {
spaceCount++;
}
}
return spaceCount; // the expression is: 12 + 1, so this should return 2, but it returns 0;
}
Ваш код выглядит нормально, но если вы хотите подсчитать пробелы, вы можете использовать это:
int count = str.length() - str.replace(" ", "").length();
replace
по времени. Это может быть очень неэффективно.
Это найдет пробелы, в том числе специальные. Вы можете сохранить шаблон, поэтому вам не нужно его компилировать каждый раз. Если вам просто нужно искать "", то цикл должен сделать это.
Matcher spaces = Pattern.compile("\\s").matcher(argumentString); int count = 0; while (spaces.find()) { count++; }
Токенизатор является излишним (и на самом деле не помогает) для этой проблемы. Просто пропустите все символы и подсчитайте пробелы:
public int countSpaces( String expr )
{
int count = 0;
for( int i = 0; i < expr.length(); ++i )
{
if( expr.charAt(i) == ' ' )
++count;
}
return count;
}
Можно также использовать:
String[] strArr = st.split(" ");
if (strArr.length > 1){
int countSpaces = strArr.length - 1;
}
Еще одно однострочное решение может быть следующим, которое также выполняет проверку NULL для строки.
int spacesCount = str == null ? 0 : str.length() - str.replace(" ", "").length();