Java字数统计程序

Ken*_*ous 7 java

我正在尝试制作一个关于字数的程序,我已经部分制作并且它给出了正确的结果,但是当我输入空格或字符串中的多个空格时,字数的结果显示错误的结果,因为我在计算单词在使用的空间的基础上.如果有一个解决方案,无论有多少空格,我仍然得到正确的结果,我需要帮助.我提到下面的代码.

public class CountWords 
{
    public static void main (String[] args)
    {

            System.out.println("Simple Java Word Count Program");

            String str1 = "Today is Holdiay Day";

            int wordCount = 1;

            for (int i = 0; i < str1.length(); i++) 
            {
                if (str1.charAt(i) == ' ') 
                {
                    wordCount++;
                } 
            }

            System.out.println("Word count is = " + wordCount);
    }
}
Run Code Online (Sandbox Code Playgroud)

A N*_*ter 18

public static void main (String[] args) {

     System.out.println("Simple Java Word Count Program");

     String str1 = "Today is Holdiay Day";

     String[] wordArray = str1.trim().split("\\s+");
     int wordCount = wordArray.length;

     System.out.println("Word count is = " + wordCount);
}
Run Code Online (Sandbox Code Playgroud)

这些想法是将字符串拆分为任意次出现的任何空白字符上的单词.String类的split函数返回一个包含单词作为其元素的数组.打印数组的长度将产生字符串中的单词数.

  • 我不确定我是否可以关注你的评论.这会变得更简单.引入if-else语句和for循环肯定会使程序更长一些,效率更低,更不用说了. (5认同)

hen*_*lle 14

两条路线.一种方法是使用正则表达式.你可以找到更多关于正则表达式在这里.一个很好的正则表达式就像"\ w +"然后计算匹配数.

如果你不想去那条路线,你可以有一个布尔标志,记住你看到的最后一个字符是否是一个空格.如果是,请不要计算.所以循环的中心看起来像这样:

boolean prevCharWasSpace=true;
for (int i = 0; i < str1.length(); i++) 
{
    if (str1.charAt(i) == ' ') {
        prevCharWasSpace=true;
    }
else{
        if(prevCharWasSpace) wordChar++;
        prevCharWasSpace = false;

    }
}
Run Code Online (Sandbox Code Playgroud)

更新
使用拆分技术完全等同于此处发生的事情,但它并没有真正解释它为何起作用.如果我们回到我们的CS理论,我们想要构建一个计算单词的有限状态自动机(FSA).FSA可能表现为:
在此输入图像描述
如果查看代码,它会完全实现此FSA.prevCharWasSpace跟踪我们所处的状态,并且str1.charAt('i')决定遵循哪个边缘(或箭头).如果使用split方法,则会在内部构造等效于此FSA的正则表达式,并用于将字符串拆分为数组.


Vam*_*msi 3

您可以使用String.split在此处阅读更多内容)代替 charAt,您将获得良好的结果。charAt如果您出于某种原因想使用,请尝试在计算单词数之前修剪字符串,这样就不会有额外的空间和额外的单词