【问题标题】:Using Nest for loop to count unique words使用 Nest for 循环计算唯一词
【发布时间】:2018-03-03 15:59:28
【问题描述】:

我需要编写 Java 程序来解析字符串中的单词。我不能使用 Java 库提供的工具,而是创建可以完成所有工作的代码。该类应该能够将给定的句子分解为单词,其中单词被定义为任何空格、逗号或句点之间的字符。该类应该有一个以句子为参数的构造函数。该类应该定义几个公共值方法。该类应该有一个名为“public static void main()”的方法,该方法演示了该类可以对下面显示的特定硬编码语句做什么。演示应该将此文本写入控制台:

句子: 豌豆和胡萝卜都可以,但纯豌豆更好。 字数:10 唯一字数:8

这是我目前所拥有的。计算总字数并不难,而且结果是正确的。然而,计算唯一词的数量是困难的部分。

public class SP
{
    String sentence; 
    String []words;
    String []uWords;
    public SP (String s)
    {
        sentence = s;
        System.out.println(s);
        words = parse (sentence);
        System.out.println("Number of words is "+ words.length);

    }

public static void main ()
{
    SP sp = new SP("Peas and carrots are ok, but plain peas are better.");
}

public String[] parse(String s)
{
    s = s.replace(".", ""); //delete punctuation
    s = s.replace(",", "");
    s = s.replace("?", "");
    s = s.replace("!", "");
    String w[]=s.split(" "); //split at white spaces
    return w;
}

public int unique (String[]w)
{
    int u=0;
    int i;
    int j;

    for (i=0; i < w.length; i++)
    {
        for (j=0; j<i; j++)
        {
            if (w[i].equals(w[j]))
            {
                u++;
            }
        }
    }
    return u;
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 计算每个元素在列表中出现的次数,如果计数为 1,则将其添加到另一个列表中。
  • 我会使用 StringBuilder 类代替替换和拆分。并且会得到句子作为参数。

标签: java arrays string unique


【解决方案1】:

使用一个集合,根据定义将只包含唯一的条目,将在线性时间内执行。

String[] words = {"Hello", "World", "Hello"};
Set set = new HashSet<String>(Arrays.asList(words));
System.out.println(set.size());

【讨论】:

  • 我对 Java 还是很陌生,所以我以前没有使用过 Hashmaps。这是一项简单的任务吗?
  • 实际上,如果您只需要唯一项目的计数,请划开哈希图,使用集合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2021-01-31
相关资源
最近更新 更多