独特的单词阵列

时间:2016-09-22 21:08:02

标签: java arrays split

所以,我有一个句子,我用它将split函数变成了一个单词数组。 现在(这是我需要帮助的地方)我想循环遍历这个数组并将句子中的每个单独的单词添加到第二个数组,这对我来说是一个初学者来说很难。任何解决方案或提示让我走上正确的轨道将不胜感激。

(我知道这个问题可能看起来很愚蠢,但我重申,我是初学者,所以对我很轻松)

谢谢:)

5 个答案:

答案 0 :(得分:1)

我在手机上,所以我无法提供代码示例,但我可以向您发送正确的方向。

你是gonne有一个第一个循环(让我们称之为loopA),它将遍历包含原始句子单词的数组。对于该阵列中的每个元素,您将拥有一个" if"检查数组中的当前单词是否存在于第二个单词中。如果是,则跳过并继续循环,如果不是,则将该字添加到第二个数组(array2 [i] = array1 [i])。要查看array2是否包含当前单词,您可以使用第二个循环来验证这一点。祝其他人好运:))

答案 1 :(得分:1)

如果您不需要维持秩序,您的职责非常简单:

String[] uniqueWords = new HashSet<>(Arrays.asList(allWords)).toArray(new String[0]);

如果您需要维持秩序,您可以执行以下操作:

ArrayList<String> uniqueWords = new ArrayList<String>(allWords.length);
Set<String> track = new HashSet<>();
for (String word : allWords) {
    if (!track.contains(word)) {
        uniqueWords.add(word);
        track.add(word);
    }
}
return uniqueWords.toArray();

还有其他不那么简单,效果更好的方法来处理你的事情,比如在单词中保留单词等等。

答案 2 :(得分:0)

这是一个整洁的衬里,可以做你想要的,其中words是初始数组:

String[] uniqueWords = Arrays.stream(words).distinct().toArray(String[]::new);

你也可以做一个简单的功能来做到这一点。类似的东西:

static String[] getUniqueWords(String[] words) {
    ArrayList<String> uniqueWords = new ArrayList<>();

    for (String word : words) {
        if (!uniqueWords.contains(word)) {
            uniqueWords.add(word);
        }
    }

    return uniqueWords.toArray(new String[0]);
}

答案 3 :(得分:0)

您应该使用像这样的HashSet

Set mySet = new HashSet();
for (int i=0;i<array.length;i++)
    mySet.add(array[i]);

然后,您应该使用迭代器来创建第二个数组

Iterator iterator = mySet.iterator();
String newArray = new String[array.length];
int counter=0;
while (iterator.hasNext()) {
     newArray[counter] = iterator.next();
     counter++; 
}

答案 4 :(得分:0)

不要使用数组。请改用Set。这将确保只使用唯一的单词而无需担心逻辑。

String original = "This sentence has has some duplicate words words on purpose and it has some extra words as well";
String[] words = original.toLowerCase().split(" ");
Set<String> uniqueWords = new HashSet<>();
uniqueWords.addAll(Arrays.asList(words));

for (String word : uniqueWords) {
    System.out.println(word);
}

如果它们具有不同的情况,则会将相同的单词添加两次,您可以使用toLowerCase()toUpperCase()使它们具有相同的大小写。

此外,标点符号可以使其看起来像一个不同的单词(例如句子末尾的句点),因此在将String拆分为数组时务必删除任何标点符号。