如何计算给定参数中的空格?

How to count white spaces in a given argument?

我觉得很奇怪,为什么当表达式为“12 + 1”时,spaceCount 不相加。我得到 spaceCount 的输出 0,即使它应该是 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;
}

对于这个问题,分词器有点矫枉过正(并不能真正帮助您)。只需遍历所有字符并计算空格:

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

你的代码似乎没问题,但如果你想计算空格,你可以使用这个:

int count = str.length() - str.replace(" ", "").length();

另一种单行解决方案如下,它也对字符串执行 NULL 检查。

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

也可以使用:

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

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

这将查找空格,包括特殊空格。 您可以保留模式,这样您就不需要每次都编译它。如果只需要搜索“”,则应该使用循环来代替。

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