当前位置: 首页 > 知识库问答 >
问题:

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

岳茂
2023-03-14

我试图写一个快速的程序,在输入的字符串中计数空格的数量。这是我到目前为止所拥有的:

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 html" target="_blank">while/for循环,我也会得到同样的结果。我已经在这方面停留了一段时间,不知道为什么当while循环的其余部分继续执行时,SpaceCount会停留在2。

任何帮助都非常感谢!

共有3个答案

温嘉玉
2023-03-14

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

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

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

为此:

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

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

夹谷琨
2023-03-14

我只是很好奇为什么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.");

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

 类似资料:
  • 本文向大家介绍C++中带空格字符串的输入问题解决,包括了C++中带空格字符串的输入问题解决的使用技巧和注意事项,需要的朋友参考一下 前言 字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结。 C++用cin输入的时候会忽略空格以后的字符,比如 C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hell

  • 使用我发现研究如何在字符串的字符之间插入空格的代码(这里),我修改了结果,但这并没有在“你好”和“世界”之间的空格周围插入额外的空格——你能让我知道我错过了什么吗?还有,L%2是做什么的?谢谢!将结果输出到浏览器是很重要的。

  • 我是C#的新手,我有一些Java方面的基础知识,但我不能让这段代码正常运行。 它只是一个基本的计算器,但当我运行程序时,VS2008给了我这个错误: 我做了几乎相同的程序,但在Java使用的是JSwing,它运行得非常好。 下面是C#的形式: 会有什么问题?有没有办法解决? PS:我也试过 但没有奏效。

  • 问题内容: 如何在Python 2.6中删除XML字符串中的空格和换行符?我尝试了以下软件包: etree:此代码段保留原始空格: 我不能使用将提供参数的Python 2.7 。 渺小:一样: 问题答案: 最简单的解决方案可能是使用lxml,您可以在其中设置解析器选项以忽略元素之间的空白: 这可能足以满足您的需求,但是有些警告是安全的: 这只会删除元素之间的空格节点,并尽量不要删除内容混合的元素内

  • 字符串中存在的首尾空格一般情况下都没有任何意义,如字符串“ Hello ”,但是这些空格会影响到字符串的操作,如连接字符串或比较字符串等,所以应该去掉字符串中的首尾空格,这需要使用 String 类提供的 trim() 方法。 trim() 方法的语法形式如下: 使用 trim() 方法的示例如下: 从该示例中可以看出,字符串中的每个空格占一个位置,直接影响了计算字符串的长度。 如果不确定要操作的

  • 问题内容: 我在JSF支持bean中具有以下方法: 我在数据表中显示此: 但是我得到以下异常: 它是怎么引起的,我该如何解决?\ 问题答案: 所以, 导致此: 您是否正在运行您认为正在运行的代码?的参与在堆栈跟踪指示是 实际上 像一个数组。数组值只能通过像整数索引来获得,但你用字符串访问它作为导致了这一例外。 确保返回,而不是,并且已将的正确版本声明为托管Bean。