大家好,也许你可以帮忙。这是我的问题
例如:"我每次与我的狗和姐姐一起跑步#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
答案 0 :(得分: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)
答案 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)删除重复的元素。