公共静态无效字(字符串文本){int numWords=1;
for (int charNum = 0; charNum < text.length(); charNum++) {
char letter = text.charAt(charNum);
if(charNum + 1 < text.length()) {
char nextLetter = text.charAt(charNum + 1);
if(letter == '.' || letter == ':' || letter == ';' || letter == '?' || letter == '!'|| letter == ' ' || letter == '\n' || letter == '\t') {
if(nextLetter != '.' || nextLetter != ':' || nextLetter != ';' || nextLetter != '?' || nextLetter != '!'|| nextLetter != ' ' || nextLetter != '\n' || nextLetter != '\t')
numWords += 1;
}
}
}
System.out.println("Number of words: " + numWords);
}
字符串“是this_one_long_word还是几个???你觉得怎么样??太多“应该打印10个字和”!这使用periods.as.word.delimiters,可能很棘手。“应该打印10个单词。
描述如下:一个单词是由一个或多个字符组成的序列,由空格或句子终止符(句号、冒号、分号、问号、感叹号)分隔,无论它是否为实际的英语单词。空白被定义为空格、制表符('\t')、新行字符('\n')和字符串本身的结尾。这再次给出了一些可能没有意义的结果。例如,文本“我不喜欢使用空格!”只有一个词:我永远不喜欢使用空格。
您在最后一个if
(最嵌套的一个)中有无效条件-您需要确保下一个字符(在代码中称为nextLetter
)不是您检查的字符,但您使用或代替了和条件,因此它始终为真(因为字符不能同时是两个不同的字符)。
因此,您可以将此如果
更改为:
if(nextLetter != '.' && nextLetter != ':' && nextLetter != ';' && nextLetter != '?' && nextLetter != '!'&& nextLetter != ' ' && nextLetter != '\n' && nextLetter != '\t')
它会正确地计算单词。请确保您也计算第一个单词,因为目前如果您将
NumWords
设置为零,它将为您的示例打印9
而不是10
-因为第一个单词不被计算在内。所以你也应该数数。
Btw.您的代码可以在几个方面得到显著简化,您也可以使用替代方法,如
拆分
函数(来自String)。
以下一行始终正确:
if(nextLetter != '.' || nextLetter != ':' || nextLetter != ';' || nextLetter != '?' || nextLetter != '!'|| nextLetter != ' ' || nextLetter != '\n' || nextLetter != '\t')
将其更改为:
if(nextLetter != '.' && nextLetter != ':' && nextLetter != ';' && nextLetter != '?' && nextLetter != '!'&& nextLetter != ' ' && nextLetter != '\n' && nextLetter != '\t')
开始计算int numwords=1
将为您提供不正确的计数。从0开始。
您的第二个输入从
开始!
向计数中添加一个单词。
您必须检查终止符后面的字符是否是字母,以避免这种行为:
public static void words(String text) {
int numWords = 0;
final String wordTerminators = ".:;?! \n\t";
for (int charNum = 0; charNum < text.length() - 1; charNum++) {
char letter = text.charAt(charNum);
char nextLetter = text.charAt(charNum + 1);
if (wordTerminators.contains(letter + "")) {
if (!wordTerminators.contains(nextLetter + "") && !(nextLetter+"").matches("[A-Za-z]"))
numWords += 1;
}
}
System.out.println("Number of words: " + numWords);
}
以下是我的解决方案的更清晰版本:
public static void words(String text) {
int numWords = 0;
String[] splitted = text.split("[.:;?! \\n\\t]+");
for (String word : splitted) {
if (word.length() > 0)
numWords++;
}
System.out.println("Number of words: " + numWords);
}
两种方法的输出都是:
Number of words: 10
Number of words: 10
我正在尝试限制关键字输入。 每当用户输入一个关键字,它就会在该关键字后面加上'span',例如。 如下面的html代码。 我可以限制字,但计数不准确,但当它达到5,它停止输入。 如果我刷新页面,我可以再输入一个,然后再阻止我一次。 奇怪的是,如果我为使用id就不起作用了。我得利用课堂。 我试过把,但不起作用,我必须保留它的资本。 jQuery: HTML:
我已经把一些代码放在一起,对人们的考试成绩进行排序,这样他们就可以看到他们的最高成绩是什么,以及他们什么时候达到的。我创建了以下代码,但它没有显示1、2、3等计数器,我缺少什么? 它打印以下内容,所有内容都显示1,而它应该是1、2、3等。
(英语不是我的第一语言,所以请原谅任何错误) 我使用SparkSQL从hive表中读取4.7TB的数据,并执行计数操作。做那件事大约需要1.6小时。而直接从HDFS txt文件读取和执行计数,只需要10分钟。这两个作业使用相同的资源和并行性。为什么RDD计数需要这么多时间? 配置单元表大约有30万列,序列化可能代价高昂。我检查了spark UI,每个任务读取大约240MB的数据,执行大约需要3.6
问题内容: 下面是分别用和编码的简单过程(对于那些对此过程感到好奇的人,这是针对Euler项目5号问题的解决方案)。 我的问题是,下面的代码仅需9秒即可迭代,而代码完成则需要283秒(确切地说,在Python 3.4.3-64位上为283秒,在Python 2.7.9-32位上为329秒)。 到目前为止,我已经编码的两种类似的过程和与执行时间的差异,具有可比性。但是,这次,经过的时间之间存在极大的
本文向大家介绍js为什么不能正确处理小数运算?,包括了js为什么不能正确处理小数运算?的使用技巧和注意事项,需要的朋友参考一下 上面的程序会输出1吗? 在 你有必要知道的 25 个 JavaScript 面试题 一文中,第 8 个题浅显的说了下 js 为什么不能正确处理小数运算的问题。今天重拾旧题,更深层次的剖析下这个问题。 但要先说明的是,不能正确处理小数的运算并不是 JavaScript 语言
问题内容: 我有一个像这样的mysql表: 当访问者访问该网站时,它将其访问者ID和页面ID存储为一行。 我试图提取恰好X次访问该网站的访问者数量。(用于图表)。那么有多少人只访问一页,有多少人访问了2页… 到目前为止,我有: 但是我不知道该怎么做下一部分的计数。 可以作为MySQL查询吗? 问题答案: 我可以这样解决: 这一点很重要。