创建一个包含文本中单词的集合

时间:2011-07-20 10:11:41

标签: java string set

我必须为WebPageData编写一个名为getWordsInString()的公共类方法。该方法采用一个名为text的参数,该参数应为String类型。 getWordsInString()的目的是返回一个由文本引用的字符串中的distict词组成的集合。

首先使用您在Javadoc中找到的String类的方法,该类将根据字符串参数的值将任意字符串分成多个部分。使用此方法将文本引用的字符串拆分为单词数组,并将此数组分配给名为wordArray的局部变量。该方法应声明一个能够引用一组字符串的局部变量,并为其分配一个合适类的空实例。接下来迭代wordArray并将其元素添加到新创建的集合中,最后返回应该包含文本引用的字符串中的不同单词的集合。

import java.util.*;

public class WebPageData {

private Set<String> wordSet;
private Set<String> url;

public Set<String> getUrl() {
    return url;
}

public Set<String> getWordSet() {
    return wordSet;
}

public static String getWordsInString(text) {
    return test;



public String[] split(String regex) {

            private String[] wordArray;

for (String eachText : numSet) {
    hashSet.add(text);
    ) 
   }

我正在努力解决这个问题,请帮忙吗?

4 个答案:

答案 0 :(得分:11)

你只需要一行来完成所有事情:

Set<String> set = new HashSet<String>(Arrays.asList(text.split(" +")));

或者在java 8中:

Set<String> set = Arrays.stream(text.split(" +")).collect(Collectors.toSet());

答案 1 :(得分:1)

您的代码中有很多语法错误:

  • 类WebPageData缺少关闭括号。
  • 方法getWordsInString缺少关闭括号。
  • 方法拆分缺少关闭括号
  • wordArray是一个局部变量,它不应该使用关键字private。
  • 在“hashSet.add(text);”
  • 之后你有一个结束语
  • 未声明hashSet变量。
  • 你的split方法声明它返回一个String数组但是 错过了一份退货声明。

要在语法上正确,你应该写一些类似的东西:

import java.util.*;

public class WebPageData {

    private Set<String> wordSet;
    private Set<String> url;

    public Set<String> getUrl() {
        return url;
    }

    public Set<String> getWordSet() {
        return wordSet;
    }

    public static String getWordsInString(text) {
        String[] wordArray;
        return test;
    }

    public String[] split(String regex) {
        String[] wordArray;
        Set<String> hashSet = new HashSet<String>();

        for (String eachText : numSet) {
            hashSet.add(text);
        }
        return null;
    }    
}

现在这在语法上是正确的,但不是你想要的。

这是一个正确的getWordsInString方法:

public Set<String> getWordsInString(String text) {
    String[] wordArray = text.split(" ");
    Set<String> set = new HashSet<String>();
    for (String currentWord : wordArray) {
      set.add(currentWord);
    }
    return set;
}

这可能是一种不那么冗长的方式(但这不是你需要做的):

public Set<String> getWordsInString(String text) {
    List<String> words = Arrays.asList(text.split(" "));
    return new HashSet(words);
}

我更喜欢第二个版本,因为它集中了您想要的,将您的数组转换为集合。另一个进入迭代完整列表的细节。当性能成为一个重要问题时,你会更喜欢第一个版本。

答案 2 :(得分:0)

public Set<String> getWordSet(String input) {
    String[] words = input.split(" ");
    Set wordSet=new Set();
    for(int i =0; i<words.length;i++){//length or size() :S im not sure
        wordSet.add(words[i]);
    }

    return wordSet;
}

我不测试它

答案 3 :(得分:0)

public Set<String> getWordSet(String input) {
    return new HashSet<String>(Arrays.asList(input.split(" ")));
}

创建(临时)列表存在性能损失,但对于典型情况,它应该不是问题。