数字,java

时间:2010-10-28 15:24:18

标签: java char switch-statement

我想算数字。我使用方法 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 *

句子不必以“。”结尾。

任何想法如何解决?

5 个答案:

答案 0 :(得分:7)

您忘记了第一个case中的break statementisWord = 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;

你是否有意在开关中省略了休息时间?你使用的逻辑对我来说似乎有点奇怪。