如何将句子中的单词输入到唯一列表中

时间:2011-12-26 06:30:55

标签: java

大家好,也许你可以帮忙。这是我的问题

例如:"我每次与我的狗和姐姐一起跑步#34;

我想要一个包含上述句子中所有唯一单词的列表:

列出数据= {I,am,running,all,over,the,time,every,with,my,dog,and sister}

我已经在下面尝试过这段代码,但是运行速度很慢,而且句子很短

List textList = new ArrayList();
    StringTokenizer stringTokenizer = new StringTokenizer(text);

    while (stringTokenizer.hasMoreElements()) {
        String tokenData = (String) stringTokenizer.nextElement();
        if ((textList.size() > 0)) {
            Boolean exist = false;
            for (int i = 0; i < textList.size(); i++) {
                if (tokenData.toLowerCase().equals(
                        textList.get(i).toString().toLowerCase()))
                    exist = true;
            }
            if (exist == false)
                textList.add(tokenData);
        } else {
            textList.add(tokenData);
        }

    }

除了这种更快的方式之外还有相同的结果吗?感谢您的回复thx

7 个答案:

答案 0 :(得分:4)

试试这个:

  1. 通过按空格分割字符串来创建数组。
  2. 从该数组创建一个列表。
  3. 从该列表中创建一个Set以删除重复项。
  4. <德尔> Set data = new HashSet(Arrays.asList(yourString.split(" ")));

    Set<String> data = new HashSet<String>(Arrays.asList(yourString.split(" ")));

    再次从该集合中创建一个列表,这将是结果。

答案 1 :(得分:2)

试试这段代码

String data = "I am running all over the time every time with my dog and my sister";
String[] arr = data.split(" ");

Set<String> st = new HashSet<String>();

st.addAll(Arrays.asList(arr));

Set仅允许使用唯一值,并且将忽略重复项。

答案 2 :(得分:1)

您可以使用不包含重复项的Set<E>

如果要将其转换为列表,则只需:

List<String> listVersion = new ArrayList<String>(mySet);

答案 3 :(得分:0)

改用套装。这样你就可以每次添加单词而不检查重复项,因为集合不允许重复。

答案 4 :(得分:0)

将带有空格(“”)的句子拆分为分隔符,并将它们存储在Set(Collection)中。 使用 split()功能。 由于Set只能存储唯一元素,因此您将摆脱多余的单词。

String str  = "I am running all over the time every time with my dog and my sister" ;
String delim = "";
String[] splits = str.split(delim);

答案 5 :(得分:0)

Set<String> uniqWords = new HashSet<String>();
StringTokenizer stringTokenizer = new StringTokenizer(text);

while (stringTokenizer.hasMoreElements()) {
    String tokenData = (String) stringTokenizer.nextElement();
    uniqWords.add(tokenData.toLowerCase());
}

// Now you can retreive the words as array
// uniqWords.toarray();

答案 6 :(得分:0)

在最坏的情况下,代码的时间复杂度至少为O(n * n)。除了标准的Java Set版本解决方案之外,您还可以尝试1)通过按空格分割字符串来创建数组,2)对数组进行排序,3)删除重复的元素。