Печатайте слова, встречающиеся более одного раза, из строки - PullRequest
0 голосов
/ 02 мая 2011

Я пытаюсь найти и напечатать слова в строке, которая встречается более одного раза. И это работает почти. Однако я борюсь с небольшой проблемой. Слова напечатаны дважды, так как они встречаются в предложении дважды. Я хочу, чтобы они печатались только один раз:

Это мой код:

public class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    String sentence = "is this a sentence or is this not ";
    String[] myStringArray = sentence.split(" "); //Split the sentence by space.

    int[] count = new int[myStringArray.length];
    for (int i = 0; i < myStringArray.length; i++){
       for (int j = 0; j < myStringArray.length; j++){
           if (myStringArray[i].matches(myStringArray[j]))
               count[i]++;
           //else break;
       }
    }
    for (int i = 0; i < myStringArray.length; i++) {
            if (count[i] > 1)
          System.out.println("1b. - Tokens that occurs more than once: " + myStringArray[i] + "\n");
    }
}

}

Ответы [ 4 ]

0 голосов
/ 01 апреля 2014

Мы хотим найти повторяющиеся слова из входной строки.Итак, я предлагаю следующий подход, который довольно прост:

  1. Создайте экземпляр Hash Map.Ключ (String) будет словом, а значение (Integer) будет частотой его появления.
  2. Разделить строку, используя метод split ("\ s"), чтобы создать массив только слов.
  3. Введите переменную типа Integer частоты с начальным значением «0».
  4. Итерация массива строк и после проверки частоты добавьте каждый элемент (или слово) на карту (если частота для этого ключа равна 0) или если ключ (слово) существует, увеличьте частоту только на 1,
  5. Итак, теперь у вас осталось каждое слово и его частота.

Например, если входная строка «Мы пачкаемся, поскольку эта земля загрязняется. Мыдолжен остановить это. "Итак, карта будет{(«Мы», 2), («есть», 1), («получаю», 2), («грязно», 1), («как», 1), («это», 1), ("земля", 1), ("есть", 1), ("загрязнен", 1), ("должен", 1), ("остановиться", 1), ("это.", 1)}Теперь вы знаете, что является следующим шагом и как его использовать.Я согласен с Каушиком.

0 голосов
/ 02 мая 2011

перерыв в первом матче после увеличения. тогда он также не будет увеличивать второй матч.

0 голосов
/ 03 мая 2011

Ваш код имеет некоторые проблемы с ним.

Если вы заметите, ваш код будет просматривать список из n элементов n ^ 2 раза.Если вхождение слова в два раза.Вы будете увеличивать значение счетчика каждого слова в два раза.Вам нужно следить за набором слов, которые вы уже видели, и проверить, было ли новое слово, с которым вы столкнулись, уже видели или нет.

Если в вашем предложении было 3 вхождения одного слова,каждое ваше слово будет иметь счет 3. 3 - это избыточные данные, которые не нужно хранить для каждого токена, а просто слово.

Все это можно легко сделать, если вы знаете, какMap работает.

Вот реализация, которая будет работать.

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {

        String sentence = "is this a sentence or is this not ";
        String[] myStringArray = sentence.split("\\s"); //Split the sentence by space.

        Map <String, Integer> wordOccurrences = new HashMap <String, Integer> (myStringArray.length);

        for (String word : myStringArray)
            if (wordOccurrences.contains(word))
                wordOccurrences.put(word, wordOccurrences.get(word) + 1);
            else wordOccurrences.put(word, 1);

        for (String word : wordOccurrences.keySet())
            if (wordOccurrences.get(word) > 1)
                System.out.println("1b. - Tokens that occurs more than once: " + word + "\n");
    }
}
0 голосов
/ 02 мая 2011

Вместо этого можно попробовать for (int i = 0; i < myStringArray.length; i+=2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...