显示输入字符串中的空格数?

时间:2016-10-01 04:34:13

标签: java

我正在尝试编写一个快速程序来计算输入字符串中的空格数。这就是我到目前为止所做的:

import java.util.Scanner;

public class BlankCharacters
{
    public static void main(String[] args) 
    {   
        System.out.println("Hello, type a sentence. I will then count the number of times you use the SPACE bar.");

        String s;
        int i = 0;
        int SpaceCount = 0;

        Scanner keyboard = new Scanner(System.in);
        s = keyboard.nextLine();

        while (i != -1)
        {
            i = s.indexOf(" ");
            s = s.replace(" ", "Z");
            SpaceCount++;
        }

        System.out.println("There are " + SpaceCount + " spaces in your sentence.");     
    }
}

while循环首先使用s.indexOf("")查找字符串s中的第一个空格,用char Z替换它,然后将值加到SpaceCount值。重复此过程,直到s.indexOf找不到空格,导致i为-1,从而停止循环。

换句话说,每次找到空白区域时,SpaceCount会增加1,然后会向用户显示空白区域的总数。或者它应该是......

问题:SpaceCount不会增加,而是总是打印出来。

如果我输入"一两三四五?"并打印掉字符串s,我会得到" oneZtwoZthreeZfourZfive",表示有四个空格(并且while循环运行四次)。尽管如此,SpaceCount仍为2。

程序运行正常,但它总是显示SpaceCount为2,即使字符串/句子超过十或二十个字。即使使用do while / for循环,我也会得到相同的结果。我已经坚持了一段时间,并且不确定为什么当剩下的while循环继续执行时(如预期的那样)SpaceCount停留在2。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

  

我真的很好奇为什么SpaceCount没有改变

在循环的第一次迭代中,用任何东西(所有空格)替换" ",并递增SpaceCount。在第二次迭代中,您什么都找不到(获取-1)并且不替换任何内容,然后递增SpaceCount(获取2)。

不是修改String,而是迭代String中的字符并计算空格。

System.out.println("Hello, type a sentence. I will then count the "
    + "number of times you use the SPACE bar.");
Scanner keyboard = new Scanner(System.in);
String s = keyboard.nextLine();
int spaceCount = 0;
for (char ch : s.toCharArray()) {
    if (ch == ' ') {
        spaceCount++;
    }
}
System.out.println("There are " + spaceCount + " spaces in your sentence.");

此外,按照惯例,变量名称应以小写字母开头。而且,通过在声明变量时初始化变量,可以使代码更简洁。

答案 1 :(得分:2)

你在计算白色空间方面走得很远。替换这段代码:

    while (i != -1)
    {
        i = s.indexOf(" ");
        s = s.replace(" ", "Z");
        SpaceCount++;
    }

有了这个:

char[] chars = s.toCharArray();
for(char c : chars){
    if(c == ' '){
        spaceCount++;
    }
}

这更优雅,(我相信)执行起来也更便宜。希望对你有用!

答案 2 :(得分:1)

使用此,简单直接。将空格字符替换为none,并将其与字符串的实际长度相减。这应该给出字符串

中的空格数
Scanner n = new Scanner(System.in);
n.useDelimiter("\\n");
String s = n.next();
int spaceCount = s.length() - s.replaceAll(" ", "").length();
System.out.println(spaceCount);