【问题标题】:Count words in a String that is NOT in a string array without using split method在不使用拆分方法的情况下计算不在字符串数组中的字符串中的单词
【发布时间】:2013-11-26 07:04:30
【问题描述】:

我需要计算字符串中的单词。对于你们中的许多人来说,这似乎很简单,但是从我在类似问题中读到的内容中,人们说要使用数组,但我宁愿不使用。由于我的字符串来自输入文件并且程序无法硬连线到特定文件,因此它使我的程序复杂化而不是帮助。

到目前为止我有这个:

while(input.hasNext())
    {
        String sentences = input.nextLine();
       int countWords;
       char c = " ";
       for (countWords = 0; countWords < sentences.length(); countWords++)
       {
            if (input.hasNext(c))
                countWords++;
       }

       System.out.println(sentences);
       System.out.println(countWords);
    }

问题是我在这里最终计算了字符串中的字符数量。我认为它会将 char c 视为分隔符。我也尝试过使用 String c 代替 input.hasNext 但编译器告诉我:

Program04.java:39: incompatible types
found   : java.lang.String[]
required: java.lang.String
       String token = sentences.split(delim);

我已经从程序中删除了 .split 方法。 如何在不使用带有扫描文件的字符串数组的情况下分隔(这是正确的词吗?)?

【问题讨论】:

  • -.- 我不是说这个词是一个数组。我是说我不想使用字符串数组。
  • 坦率地说,你不使用数组的原因听起来像:我不能去电影院,因为我有一辆白色汽车,而且我不能将我的白色汽车硬连接到电影院。这没有任何意义。使用数组不会强迫你硬连线任何东西。

标签: java string count split words


【解决方案1】:

不要将扫描程序 (input) 用于多于一件事。您正在使用它从文件中读取行,并尝试使用它来计算这些行中的单词。使用第二个 Scanner 来处理行本身,或使用其他方法。

问题在于扫描器在读取缓冲区时会消耗它。 input.nextLine() 返回sentences,但之后不再拥有它们。在其上调用input.hasNext() 会为您提供有关之后 sentences 之后的字符的信息。

计算sentences 中单词的最简单方法是:

int wordCount = sentences.split(" ").length;

使用扫描仪,您可以:

Scanner scanner = new Scanner(sentences);
while(scanner.hasNext())
{
     scanner.next();
     wordCount++;
}

或使用 for 循环以获得最佳性能(如 BlackPanther 所述)。

我要给您的另一个提示是如何更好地命名变量。 countWords 应该是 wordCount。 “Count words”是一个命令,一个动词,而一个变量应该是一个名词。 sentences 应该只是 line,除非您知道两者该行由句子组成,并且这一事实与您的其余代码相关。

【讨论】:

  • 我看不出使用两种不同的扫描仪会有什么帮助。如果第一个扫描仪无法使用我的代码进行定界,那么不同的扫描仪会有什么不同?
【解决方案2】:

也许,这就是你要找的。​​p>

 while(input.hasNext())
{
   String sentences = input.nextLine();
   System.out.println ("count : " + line.split (" ").length);


}

【讨论】:

  • OP说他不想使用数组,但你的代码隐式使用数组。但是,避免循环的好策略。为此+1.. :)
  • 他提到他不想使用数组,因为这会使他的代码复杂化。我已经使用了一些隐式处理数组的东西,老实说,我不认为他的代码可以比这更简单:)
  • 看看下面的 Dubinsky 代码。我想这就是我的意思,但不知道该怎么做。同样感谢您的帮助!
【解决方案3】:

你想要达到的目标不是很清楚。但如果你想计算文本文件中的单词数,那么试试这个

int countWords = 0;

while(input.hasNext())
{
   String sentences = input.nextLine();
   for(int i = 0; i< sentences.length()-1;i++ ) {
       if(sentences.charAt(i) ==  " ") {
          countWords++;
       }
   }
}
System.out.println(countWords);

【讨论】:

  • 嘿,谢谢!这效果最好,但每行相差 1 个字。我该如何解决?
  • 我认为你的意思是它只显示每行的计数。看看我的编辑。它会给你文件的全部字数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 2020-04-09
  • 2019-10-04
相关资源
最近更新 更多