Как посчитать пробелы в заданном аргументе?

1

Мне кажется странным, почему 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;
}
  • 0
    @clcto: третьи параметры указывают, что разделители также должны быть возвращены как токены
  • 1
    возможный дубликат Java StringTokenizer.nextToken () пропускает пустые поля
Показать ещё 1 комментарий
Теги:
string
token
tokenize

5 ответов

3
Лучший ответ

Ваш код выглядит нормально, но если вы хотите подсчитать пробелы, вы можете использовать это:

int count = str.length() - str.replace(" ", "").length();
  • 0
    Простой и эффективный код. Только не забудьте проверить нулевые условия здесь.
  • 2
    Прежде чем использовать этот подход с «большими» строками с «множеством» пробелов, я бы просто убедился, что понимаю сложность replace по времени. Это может быть очень неэффективно.
0

Это найдет пробелы, в том числе специальные. Вы можете сохранить шаблон, поэтому вам не нужно его компилировать каждый раз. Если вам просто нужно искать "", то цикл должен сделать это.

Matcher spaces = Pattern.compile("\\s").matcher(argumentString); int count = 0; while (spaces.find()) { count++; }

0

Токенизатор является излишним (и на самом деле не помогает) для этой проблемы. Просто пропустите все символы и подсчитайте пробелы:

public int countSpaces( String expr )
{
    int count = 0;
    for( int i = 0; i < expr.length(); ++i )
    {
        if( expr.charAt(i) == ' ' )
            ++count;
    }
    return count;
}
0

Можно также использовать:

String[] strArr = st.split(" ");

if (strArr.length > 1){
   int countSpaces = strArr.length - 1;
}
0

Еще одно однострочное решение может быть следующим, которое также выполняет проверку NULL для строки.

int spacesCount = str == null ? 0 : str.length() - str.replace(" ", "").length();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню