我想算数字。我使用方法 hasNextChar 和 getChar 。句子可能包含所有类型的字符。这是我的代码:
boolean isWord = false;
while(hasNextChar()){
char current = getChar();
switch(current){
case ' ' : case '.' : case ',' : case '-' :
isWord = false;
default:
if(!isWord) wordCount++;
isWord = true;
}
}
它到目前为止有效,但是当我有一个“。”时,它给了我8个而不是7个单词。以下是一些句子示例:
*“Schreiben Sie ein Praktikanten-Vermittlungs-Programm” - 字数:6
“Du magst ja recht haben - aber ich sehe das ganz anders。” - 字数:11
“Hallo Welt !!!!” - 单词:2
“ZweiWörter!!!!” - 单词:2
“Eins,Zwei oder Drei” - 字数:4 *
句子不必以“。”结尾。
任何想法如何解决?
答案 0 :(得分:7)
您忘记了第一个case
中的break
statement(isWord = false
之后)。
答案 1 :(得分:3)
由于它是作业,我不会为你解决,而是指向正确的方向。
查看Character
类及其定义的辅助方法。 (提示:它们都被称为 isXyz()
)
<强>参考:强>
对于它来说:这是一个使用Regex计算单词的oneliner方法。不要使用这个解决方案,拿出自己的解决方案。无论如何,这可能不是你老师想要看到的。
方式:强>
public static int countwords(final String phrase) {
return phrase.replaceAll("[^\\p{Alpha}]+", " ").trim().split(" ").length;
}
测试代码:
System.out.println(countwords(
"Schreiben Sie ein Praktikanten-Vermittlungs-Programm"));
System.out.println(countwords(
"Du magst ja recht haben – aber ich sehe das ganz anders."));
System.out.println(countwords("Hallo Welt !!!!"));
System.out.println(countwords("Zwei Wörter !!!!"));
System.out.println(countwords("Eins,Zwei oder Drei"));
<强>输出:强>
6
11个
2
3
4
<强>说明:强> 用亨利罗林斯创造的一句话:让我们挤奶吧,我们呢?
// replace any occurrences of non-alphabetic characters with a single space
// this pattern understands unicode, so e.g. German Umlauts count as alphabetic
phrase.replaceAll("[^\\p{Alpha}]+", " ")
// trim space off beginning and end
.trim()
// split the string, using the spaces as delimiter
.split(" ")
// the length of the resulting array is the number of words
.length;
答案 2 :(得分:1)
关闭Michael McGowan评论,
这个逻辑对我来说似乎是倒退的。不应该检测到空格或标点符号表示您找到了一个单词吗?
你的判决是如何形成的吗?如果你有一个"One,_Two,Three,Four,____Five"
的句子,那么算法需要额外的逻辑来处理连续的空格/标点符号。
答案 3 :(得分:1)
您可以使用java.util中的StringTokenizer类,这将变得非常简单。作为构造的参数使用你拥有的字符串和你想要的所有分隔符。
StringTokenizer s = new StringTokenizer(yourString, ",. :;/");
int cantWords = s.countTokens();
答案 4 :(得分:0)
让我们来看一个小例子:“我是。”
迭代1:当前='我'; wordCount = 1; isWord = true;
迭代2:current =''; isWord = false; wordCount = 2; isWord = true;
迭代3:current ='a'; isWord = true;
迭代4:current ='m'; isWord = true;
迭代5:current ='。'; isWord = false; wordCount = 3; isWord = true;
你是否有意在开关中省略了休息时间?你使用的逻辑对我来说似乎有点奇怪。