我正在尝试制作一个关于字数的程序,我已经部分制作并且它给出了正确的结果,但是当我输入空格或字符串中的多个空格时,字数的结果显示错误的结果,因为我在计算单词在使用的空间的基础上.如果有一个解决方案,无论有多少空格,我仍然得到正确的结果,我需要帮助.我提到下面的代码.
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函数返回一个包含单词作为其元素的数组.打印数组的长度将产生字符串中的单词数.
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的正则表达式,并用于将字符串拆分为数组.
| 归档时间: |
|
| 查看次数: |
109197 次 |
| 最近记录: |