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

Java 显示输入字符串中的空格数?,java,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

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

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加1。此过程重复,直到s.indexOf没有找到空白,导致i为-1,从而停止循环

换句话说,每次发现空白时,SpaceCount都会增加1,然后向用户显示空白的总数。或者应该是

问题:空格计数不会增加,而是始终打印出2

如果我输入“一二三四五”并打印出字符串s,我会得到“oneZtwoZthreeZfourZfive”,表示有四个空格(while循环运行四次)。尽管如此,SpaceCount仍然保持在2

程序运行正常,但它始终显示2的空格计数,即使字符串/句子超过10或20个单词。即使使用do while/for循环,我也会得到同样的结果。我已经在这方面停留了一段时间,不知道为什么当while循环的其余部分继续执行时,SpaceCount会停留在2

非常感谢您的帮助

我只是很好奇为什么SpaceCount没有改变

在循环的第一次迭代中,您将用零(所有空格)替换
,并增加
SpaceCount
。在第二次迭代中,您没有找到任何内容(获取
-1
)并替换任何内容,然后增加
空间计数(获取
2

我不会修改
字符串
,而是迭代
字符串
中的字符并计算空格

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.");
此外,按照惯例,变量名应该以小写字母开头。而且,通过在声明变量时初始化变量,可以使代码更加简洁

我只是很好奇为什么SpaceCount没有改变

在循环的第一次迭代中,您将用零(所有空格)替换
,并增加
SpaceCount
。在第二次迭代中,您没有找到任何内容(获取
-1
)并替换任何内容,然后增加
空间计数(获取
2

我不会修改
字符串
,而是迭代
字符串
中的字符并计算空格

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.");

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

使用这个,简单明了。将空格字符替换为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);

使用这个,简单明了。将空格字符替换为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);

你在计算空白方面走了很长的路。替换此代码块:

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

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

这有点优雅,而且(我相信)执行起来也比较便宜。希望这对你有用

在计算空白方面,您已经走了很长的路。替换此代码块:

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

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


这有点优雅,而且(我相信)执行起来也比较便宜。希望这对你有用

如果您的字符串没有尾随空格,我的意思是在字符串前后,那么您也可以使用
StringTokenizer-tokenizer=new-StringTokenizer(str,“”);System.out.println(“空格总数为:”+(tokenizer.countTokens()-1))
简单地说,如果您在计算空格之前修剪字符串,我将尝试其他人提到的方法。我只是很好奇为什么SpaceCount没有改变。谢谢。如果您的字符串没有尾随空格,我的意思是在字符串前后,那么您也可以使用
StringTokenizer-tokenizer=new-StringTokenizer(str,“”);System.out.println(“空格总数为:”+(tokenizer.countTokens()-1))
简单地说,如果您在计算空格之前修剪字符串,我将尝试其他人提到的方法。我只是很好奇为什么SpaceCount没有改变。谢谢。不知道s.replaceAll是一件事,谢谢!对Java还是很陌生的。是的@RyanA。运行它并检查它。很好。这是一个非常昂贵的方法。它使用正则表达式和
StringBuffer
,这是一个同步类。@Gray。这是试图给出答案。很明显,您可以遍历每个字符,并将其与空格相等,然后增加计数,从而降低复杂性。这是一种尝试,用更少的代码行完成相同的工作。这很好@sameerasy。我只是想指出下一代的花费。很多人不知道replaceAll这么重。不知道s.replaceAll是个东西,谢谢!对Java还是很陌生的。是的@RyanA。运行它并检查它。很好。这是一个非常昂贵的方法。它使用正则表达式和
StringBuffer
,这是一个同步类。@Gray。这是试图给出答案。很明显,您可以遍历每个字符,并将其与空格相等,然后增加计数,从而降低复杂性。这是一种尝试,用更少的代码行完成相同的工作。这很好@sameerasy。我只是想指出下一代的花费。很多人都不知道这东西这么重。@Gray这是巧合。我不知道在这种情况下该怎么办。。。我应该删除答案吗?不。那很好。有时我觉得人们只是抄袭别人的答案。如果你愿意的话,你可以把它充实一点并添加更多细节。
if(char=''){
应该是
if(c=''){
char